JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
<h3>🔫 Tactical Gunfight in Progress!</h3> <<nobr>> /* Attribution automatique et persistante de l'image de l'ennemi si non définie */ <<if $enemy.img is undefined or $enemy.img is "">> <<if $enemy.name is "Angry Boyfriend">> <<set $enemy.img to "images/combat/club" + random(1, 5) + ".webp">> <<elseif $enemy.name is "Street Thug">> <<set $enemy.img to "images/combat/street thug" + random(1, 5) + ".jpg">> <<elseif $enemy.name is "Rival Thug">> <<set $enemy.img to "images/combat/streetpunk" + random(1, 8) + ".jpg">> <<elseif $enemy.name is "Rival Thugs">> <<set $enemy.img to "images/combat/criminal" + random(1, 8) + ".jpg">> <<elseif $enemy.name is "Desperate Debtor">> <<set $enemy.img to either("images/combat/junkie" + random(1, 6) + ".jpg", "images/combat/hobo" + random(1, 6) + ".jpg")>> <<elseif $enemy.name is "Armed Target">> <<set $enemy.img to either("images/combat/19.jpg", "images/combat/angrywoman.jpg")>> <<elseif $enemy.name is "Angry Bodyguard" or $enemy.name is "Hotel Security" or $enemy.name is "Armed Security">> <<set $enemy.img to "images/combat/fighter" + random(1, 4) + ".jpg">> <<elseif $enemy.name is "Furious Owner" or $enemy.name is "Angry Occupant">> <<set $enemy.img to "images/combat/jealous" + random(1, 8) + ".jpg">> <<elseif $enemy.name is "Paranoid Guest">> <<set $enemy.img to "images/combat/junkie" + random(1, 6) + ".jpg">> <<elseif $enemy.name is "Resisting Targets">> <<set $enemy.img to either("images/combat/angrywoman.jpg", "images/combat/streetpunk" + random(1, 8) + ".jpg")>> <<elseif $enemy.name is "Armored Riot Squad">> <<set $enemy.img to "images/combat/forces.jpg">> <<else>> <<set $enemy.img to "images/combat/criminal" + random(1, 8) + ".jpg">> <</if>> <</if>> <<if $enemy.action_gif is undefined or $enemy.action_gif is "">> <<set $enemy.action_gif to "images/combat/fight" + random(1, 4) + ".gif">> <</if>> <div style="display: flex; gap: 10px; justify-content: center; align-items: center; border: 2px solid #ff4444; padding: 8px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px; flex-wrap: wrap;"> <img @src="$enemy.img" style="max-width: 48%; max-height: 220px; height: auto; border-radius: 3px; border: 1px solid #444;"> <img @src="$enemy.action_gif" style="max-width: 48%; max-height: 220px; height: auto; border-radius: 3px; border: 1px solid #444;"> </div> /* Initialisation sécurisée du chargeur si non chargé */ <<if $active_firearm isnot "none" and $active_firearm isnot undefined>> <<set $gun_max_mag to $weapon_db[$active_firearm].mag_size>> <<if $gun_mag is undefined>><<set $gun_mag to 0>><</if>> <<else>> <<set $gun_max_mag to 0>> <<set $gun_mag to 0>> <</if>> /* Calcul des gardes du corps personnels qui accompagnent le joueur (Bodyguards uniquement) */ <<set _squadCount to 0>> <<set _squadPower to 0>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "bodyguard" or $gang_members[_g].assignment is "war">> <<set _squadCount += 1>> <<set _squadPower += $gang_members[_g].strength>> <</if>> <</for>> <div style="display: flex; justify-content: space-between; border: 1px solid #ff4444; padding: 12px; background-color: #111;"> <div> <strong>You & Personal Bodyguards</strong><br> HP: <span style="color: #ff4444;">$hp / $maxhp</span> | Stamina: <span style="color: #00ffaa;">$stamina / $maxstamina</span><br> Cover Status: <<if $player_cover >= 2>> <span style="color: #00ffaa;">Heavy Cover (75% Reduction)</span> <<elseif $player_cover is 1>> <span style="color: #00aaff;">Light Cover (45% Reduction)</span> <<else>> <span style="color: #ffaa00;">Exposed (0% Reduction)</span> <</if>><br> <<if $active_firearm isnot "none">> Weapon: <strong><<print $weapon_db[$active_firearm].name>></strong><br> Magazine: <span style="color: #ffaa00;"><strong>$gun_mag / $gun_max_mag</strong></span> | Reserve: <strong>$inventory.ammo</strong> rounds<br> <<else>> Weapon: <span style="color: #ff4444;">No Firearm Equipped!</span><br> <</if>> Personal Bodyguards: <strong>_squadCount</strong> guard(s) firing & shielding you </div> <div style="text-align: right;"> <strong>$enemy.name</strong><br> HP: <span style="color: #ff4444;">$enemy.hp / $enemy.max_hp</span><br> Firepower: <strong>$enemy.strength</strong><br> Status: <<if $enemy_suppressed is true>><span style="color: #00ffaa;">SUPPRESSED (-50% Acc)</span><<else>><span style="color: #ff4444;">Active Fire</span><</if>> </div> </div> <br> <<if $combat_log isnot "">> <div style="border-left: 3px solid #ff4444; padding: 10px; background-color: #1a1111; margin-bottom: 15px;"> $combat_log </div> <</if>> <strong>Tactical Orders:</strong><br> <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-top: 10px;"> <!-- 1. PRIMARY ATTACK: AIMED SHOT (Pistols/Rifles) OR BUCKSHOT BLAST (Shotgun) --> <<if $active_firearm is "shotgun">> <div style="background-color: #1a1a1a; border: 1px solid #ff4444; padding: 10px; text-align: center;"> <strong style="color: #ff5555;">💥 Point-Blank Buckshot</strong><br> <span style="font-size: 0.82em; color: #aaa;">Costs: 1 Shell, 6 Stamina<br>Devastating close-range pellet cone (85 DMG + Knockdown / Cover Shred).</span><br><br> <<if $gun_mag < 1>> <span style="color: #ffaa00;">[ Chamber Empty - Load Shells! ]</span> <<elseif $stamina < 6>> <span style="color: #555;">[ Too Exhausted ]</span> <<else>> <<link "[ Fire Buckshot Blast ]">> <<set $gunfight_action to "aimed">> <<goto "Gunfight_Turn">> <</link>> <</if>> </div> <<else>> <div style="background-color: #1a1a1a; border: 1px solid #ff4444; padding: 10px; text-align: center;"> <strong>🎯 Aimed Shot</strong><br> <span style="font-size: 0.85em; color: #aaa;">Costs: 1 Bullet, 5 Stamina<br>High precision vital strike.</span><br><br> <<if $active_firearm is "none">> <span style="color: #555;">[ No Firearm ]</span> <<elseif $gun_mag < 1>> <span style="color: #ffaa00;">[ Magazine Empty - Reload! ]</span> <<elseif $stamina < 5>> <span style="color: #555;">[ Too Exhausted ]</span> <<else>> <<link "[ Fire Aimed Shot ]">> <<set $gunfight_action to "aimed">> <<goto "Gunfight_Turn">> <</link>> <</if>> </div> <</if>> <!-- 2. SECONDARY TACTIC: BREACH & STAGGER (Shotgun) OR SUPPRESSIVE FIRE (Rifles/SMGs/Pistols) --> <<if $active_firearm is "shotgun">> <div style="background-color: #1a1a1a; border: 1px solid #ffaa00; padding: 10px; text-align: center;"> <strong style="color: #ffaa00;">🚪 Dynamic Breach & Stagger</strong><br> <span style="font-size: 0.82em; color: #aaa;">Costs: 2 Shells, 12 Stamina<br>Rapid double pump. Obliterates enemy cover, concusses & suppresses target.</span><br><br> <<if $gun_mag < 2>> <span style="color: #ffaa00;">[ Need 2+ Shells in Tube ]</span> <<elseif $stamina < 12>> <span style="color: #555;">[ Too Exhausted ]</span> <<else>> <<link "[ Double-Tap Breach Blast ]">> <<set $gunfight_action to "suppress">> <<goto "Gunfight_Turn">> <</link>> <</if>> </div> <<else>> <div style="background-color: #1a1a1a; border: 1px solid #ffaa00; padding: 10px; text-align: center;"> <strong>💥 Suppressive Burst</strong><br> <span style="font-size: 0.85em; color: #aaa;">Costs: 3 Bullets, 10 Stamina<br>Pins enemy (-50% enemy accuracy) & protects squad.</span><br><br> <<if $active_firearm is "none">> <span style="color: #555;">[ No Firearm ]</span> <<elseif $gun_mag < 3>> <span style="color: #ffaa00;">[ Need 3+ Bullets in Mag ]</span> <<elseif $stamina < 10>> <span style="color: #555;">[ Too Exhausted ]</span> <<else>> <<link "[ Spray Suppressive Fire ]">> <<set $gunfight_action to "suppress">> <<goto "Gunfight_Turn">> <</link>> <</if>> </div> <</if>> <!-- 3. TAKE COVER --> <div style="background-color: #1a1a1a; border: 1px solid #00aaff; padding: 10px; text-align: center;"> <strong>🛡️ Take Cover & Breathe</strong><br> <span style="font-size: 0.85em; color: #aaa;">Restores +15 Stamina<br>Upgrades ballistic cover (up to 75% reduction).</span><br><br> <<link "[ Fortify Position / Cover ]">> <<set $gunfight_action to "cover">> <<goto "Gunfight_Turn">> <</link>> </div> <!-- 4. RELOAD --> <div style="background-color: #1a1a1a; border: 1px solid #00ffaa; padding: 10px; text-align: center;"> <<if $active_firearm is "shotgun">> <strong>🔄 Combat Tube Load</strong><br> <span style="font-size: 0.82em; color: #aaa;">Feed shells into tube (+3 shells / combat load, $inventory.ammo left).<br>Maintains current cover.</span><br><br> <<else>> <strong>🔄 Tactical Reload</strong><br> <span style="font-size: 0.85em; color: #aaa;">Refills magazine from Ammo Reserve ($inventory.ammo left).<br>Maintains current cover.</span><br><br> <</if>> <<if $active_firearm is "none">> <span style="color: #555;">[ No Firearm ]</span> <<elseif $gun_mag >= $gun_max_mag>> <span style="color: #00ffaa;">[ Tube / Mag Full ]</span> <<elseif $inventory.ammo <= 0>> <span style="color: #ff4444;">[ Out of Reserve Ammo! ]</span> <<else>> <<link `($active_firearm is "shotgun" ? "[ Load Shells into Tube ]" : "[ Reload Magazine ]")`>> <<set $gunfight_action to "reload">> <<goto "Gunfight_Turn">> <</link>> <</if>> </div> </div> <div style="margin-top: 15px; text-align: center;"> <<link "🗡️ Rush into Close-Quarters Melee Combat">> <<set $combat_log to "You holster your piece and charge into close-quarters melee!">> <<goto "Combat_Main">> <</link>> </div> <</nobr>>
<<nobr>> /* 1. ACTION TACTIQUE DU JOUEUR */ <<set _logPlayer to "">> <<set $enemy_suppressed to false>> <<if $gunfight_action is "aimed">> <<set $gun_mag -= 1>> <<if $active_firearm is "shotgun">> <<set $stamina -= 6>> /* Shotgun Buckshot: Large spread cone. 90% base hit chance (extremely hard to completely miss). */ <<set _hitChance to 90 + ($player_cover * 5)>> <<if random(1, 100) <= _hitChance>> <<set _baseDmg to $weapon_db[$active_firearm].damage>> <<set _pDmg to random(Math.floor(_baseDmg * 0.90), Math.floor(_baseDmg * 1.35)) + ($intelligence * 2)>> /* Shotgun Point-Blank Devastation: 35% chance to score a massive flesh-tearing hit and concuss enemy */ <<if random(1, 100) <= 35>> <<set _pDmg to Math.floor(_pDmg * 1.5)>> <<set $enemy_suppressed to true>> <<set _logPlayer to "<strong>💥 DEVASTATING BUCKSHOT HIT!</strong> A thunderous roar tears through the air as 12-gauge 00-buck catches " + $enemy.name + " full in the chest for <strong style='color:#ff2222;'>" + _pDmg + "</strong> damage! The violent impact throws them against the wall!">> <<else>> <<set _logPlayer to "You pump the fore-end and fire a heavy buckshot blast into " + $enemy.name + ", peppering them for <strong style='color:#ff4444;'>" + _pDmg + "</strong> damage!">> <</if>> <<set $enemy.hp -= _pDmg>> <<else>> <<set _logPlayer to "The buckshot blast tears chunks out of the drywall and doorframe behind " + $enemy.name + "!">> <</if>> <<else>> <<set $stamina -= 5>> /* Précision standard (Pistolets / Fusils / SMG) : Base 75% + Intelligence*3% + Bonus de couverture */ <<set _hitChance to 75 + ($intelligence * 3) + ($player_cover * 5)>> <<if random(1, 100) <= _hitChance>> <<set _baseDmg to $weapon_db[$active_firearm].damage>> <<set _pDmg to random(Math.floor(_baseDmg * 0.85), Math.floor(_baseDmg * 1.25)) + ($intelligence * 2)>> /* Coup critique si à couvert (20%) */ <<if $player_cover > 0 and random(1, 100) <= 20>> <<set _pDmg to Math.floor(_pDmg * 1.5)>> <<set _logPlayer to "<strong>CRITICAL SHOT!</strong> Leaning out from cover, you land a lethal shot with your " + $weapon_db[$active_firearm].name + " for <strong style='color:#ff4444;'>" + _pDmg + "</strong> damage!">> <<else>> <<set _logPlayer to "You squeeze the trigger of your " + $weapon_db[$active_firearm].name + ", hitting " + $enemy.name + " for <strong style='color:#ff4444;'>" + _pDmg + "</strong> damage!">> <</if>> <<set $enemy.hp -= _pDmg>> <<else>> <<set _logPlayer to "You fire an aimed shot at " + $enemy.name + ", but the bullet ricochets off concrete!">> <</if>> <</if>> <<elseif $gunfight_action is "suppress">> <<if $active_firearm is "shotgun">> <<set $gun_mag -= 2>> <<set $stamina -= 12>> <<set $enemy_suppressed to true>> /* Dynamic Breach: 2 quick heavy pumps shredding enemy positions */ <<set _baseDmg to Math.floor($weapon_db[$active_firearm].damage * 0.95)>> <<set _pDmg to random(Math.floor(_baseDmg * 0.85), Math.floor(_baseDmg * 1.15))>> <<set $enemy.hp -= _pDmg>> <<set _logPlayer to "<strong>💥 DYNAMIC BREACH & CLEAR!</strong> You aggressively rack two 12-gauge shells in rapid succession, blasting apart " + $enemy.name + "'s position for <strong style='color:#ffaa00;'>" + _pDmg + "</strong> damage! The sheer concussive blast leaves them stunned and disoriented!">> <<else>> <<set $gun_mag -= 3>> <<set $stamina -= 10>> <<set $enemy_suppressed to true>> <<set _baseDmg to Math.floor($weapon_db[$active_firearm].damage * 0.70)>> <<set _pDmg to random(Math.floor(_baseDmg * 0.7), _baseDmg)>> <<set $enemy.hp -= _pDmg>> <<set _logPlayer to "You unleash a three-round suppressive burst with your " + $weapon_db[$active_firearm].name + ", dealing <strong style='color:#ffaa00;'>" + _pDmg + "</strong> grazing damage and pinning " + $enemy.name + " down!">> <</if>> <<elseif $gunfight_action is "cover">> <<set $stamina to Math.min($maxstamina, $stamina + 15)>> <<set $player_cover to Math.min(2, $player_cover + 1)>> <<set _logPlayer to "You dive behind solid ballistic cover, catching your breath (+15 Stamina) and fortifying your angle.">> <<elseif $gunfight_action is "reload">> <<if $active_firearm is "shotgun">> /* Tube feed: Load up to 3 shells per combat action or top off */ <<set _needed to $gun_max_mag - $gun_mag>> <<set _loadCount to Math.min(3, Math.min(_needed, $inventory.ammo))>> <<set $gun_mag += _loadCount>> <<set $inventory.ammo -= _loadCount>> <<set _logPlayer to "You keep your shoulder braced and feed <strong style='color:#ffaa00;'>" + _loadCount + "</strong> heavy 12-gauge shell(s) directly into the loading port (" + $gun_mag + "/" + $gun_max_mag + " loaded).">> <<else>> <<set _needed to $gun_max_mag - $gun_mag>> <<set _loaded to Math.min(_needed, $inventory.ammo)>> <<set $gun_mag += _loaded>> <<set $inventory.ammo -= _loaded>> <<set _logPlayer to "You slam a fresh magazine into your " + $weapon_db[$active_firearm].name + " (+" + _loaded + " rounds loaded).">> <</if>> <</if>> /* 2. TIR DE SOUTIEN DES GARDES DU CORPS PERSONNELS (BODYGUARDS) */ <<set _squadIndices to []>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "bodyguard" or $gang_members[_g].assignment is "war">> <<run _squadIndices.push(_g)>> <</if>> <</for>> <<set _wepMultMap to { "revolver": 1.20, "pistol_9mm": 1.35, "shotgun": 1.85, "smg": 1.80, "assault_rifle": 2.25 }>> <<set _armStrMap to { "biker_jacket": 1, "tactical_vest": 1, "enforcer_armor": 3, "kingpin_suit": 4 }>> <<set _armShieldMap to { "biker_jacket": 10, "tactical_vest": 18, "enforcer_armor": 28, "kingpin_suit": 35 }>> <<set _inhShieldMap to [0, 10, 15, 20]>> <<set _totalSquadShield to 0>> <<if _squadIndices.length > 0 and $enemy.hp > 0>> <<set _baseArmoryMult to 1 + ($gang_armory * 0.35)>> <<set _squadDmg to 0>> <<for _s to 0; _s < _squadIndices.length; _s++>> <<set _idx to _squadIndices[_s]>> <<set _bg to $gang_members[_idx]>> <<set _customWepMult to (_bg.custom_weapon and _wepMultMap[_bg.custom_weapon] ? _wepMultMap[_bg.custom_weapon] : 1.0)>> <<set _effWepMult to Math.max(_baseArmoryMult, _customWepMult)>> <<set _effStr to _bg.strength + (_bg.custom_armor and _armStrMap[_bg.custom_armor] ? _armStrMap[_bg.custom_armor] : 0)>> <<set _effShield to Math.max(_inhShieldMap[$gang_armory] || 0, (_bg.custom_armor and _armShieldMap[_bg.custom_armor] ? _armShieldMap[_bg.custom_armor] : 0))>> <<set _totalSquadShield += Math.floor(_effShield / 2)>> <<set _squadDmg += Math.floor(_effStr * _effWepMult * random(1, 2))>> <</for>> <<set $enemy.hp -= _squadDmg>> <<set _logPlayer += "<br><span style='color:#00aaff;'>Your Personal Bodyguard Squad (" + _squadIndices.length + ") lays down supporting fire for <strong>" + _squadDmg + "</strong> additional damage!</span>">> <</if>> /* 3. VÉRIFICATION : L'ENNEMI EST-IL ÉLIMINÉ ? */ <<if $enemy.hp <= 0>> <<set $player_cover to 0>> <<set $enemy_suppressed to false>> <<if $combat_return_victory isnot undefined>> <<goto $combat_return_victory>> <<else>> <<goto "Combat_Win">> <</if>> <<else>> /* 4. RIPOSTE ENNEMIE, BOUCLIER DES GARDES DU CORPS & PERMADEATH */ <<set _enemyAcc to ($enemy_suppressed is true ? 35 : 75)>> /* La couverture réduit aussi les chances d'être touché */ <<set _enemyAcc -= ($player_cover * 15)>> <<if random(1, 100) <= _enemyAcc>> <<set _rawEnemyDmg to random($enemy.strength * 3, $enemy.strength * 5)>> /* Réduction par la couverture */ <<if $player_cover >= 2>> <<set _finalDmg to Math.max(1, Math.floor(_rawEnemyDmg * 0.25))>> /* Le tir ennemi dégrade légèrement la couverture lourde */ <<if random(1, 100) <= 40>><<set $player_cover to 1>><</if>> <<elseif $player_cover is 1>> <<set _finalDmg to Math.max(1, Math.floor(_rawEnemyDmg * 0.55))>> <<else>> <<set _finalDmg to _rawEnemyDmg>> <</if>> /* Bouclier additionnel fourni par les gardes du corps (jusqu'à 40% de réduction supplémentaire) */ <<if _totalSquadShield > 0>> <<set _shieldPct to Math.min(40, _totalSquadShield)>> <<set _finalDmg to Math.max(1, Math.floor(_finalDmg * (100 - _shieldPct) / 100))>> <</if>> <<set $hp -= _finalDmg>> <<set _logEnemy to "The " + $enemy.name + " returns fire, hitting you for <strong style='color:#ff4444;'>" + _finalDmg + "</strong> damage!">> /* RISQUE DE PERMADEATH POUR UN GARDE DU CORPS (réduit par leur armure !) */ <<if _squadIndices.length > 0>> <<set _victimIdx to _squadIndices.random()>> <<set _victim to $gang_members[_victimIdx]>> <<set _vShield to Math.max(_inhShieldMap[$gang_armory] || 0, (_victim.custom_armor and _armShieldMap[_victim.custom_armor] ? _armShieldMap[_victim.custom_armor] : 0))>> <<set _baseLethality to ($enemy_suppressed is true ? 5 : 15)>> <<set _lethalityChance to Math.max(2, _baseLethality - Math.floor(_vShield / 3))>> <<if random(1, 100) <= _lethalityChance>> <<set _victimName to _victim.name>> <<run $gang_members.deleteAt(_victimIdx)>> <<set _logEnemy += "<br><span style='color:#ff0000;'><strong>☠️ BODYGUARD CASUALTY (PERMADEATH):</strong> A burst of enemy gunfire catches your bodyguard <strong>" + _victimName + "</strong> in the chest! He drops dead on the pavement.</span>">> <</if>> <</if>> <<else>> <<if $enemy_suppressed is true>> <<set _logEnemy to "Pinned down by your suppressive fire, " + $enemy.name + " shoots blindly into the walls!">> <<else>> <<set _logEnemy to "Bullets whiz past your head as your cover absorbs " + $enemy.name + "'s volley!">> <</if>> <</if>> /* 5. VÉRIFICATION : LE JOUEUR EST-IL MORT ? */ <<if $hp <= 0>> <<set $player_cover to 0>> <<set $enemy_suppressed to false>> <<if $combat_return_defeat isnot undefined>> <<goto $combat_return_defeat>> <<else>> <<goto "Combat_Lose">> <</if>> <<else>> <<set $combat_log to _logPlayer + "<br>" + _logEnemy>> <<goto "Gunfight_Main">> <</if>> <</if>> <</nobr>>
<h3>🏦 Apex Management & Financial Laundering</h3> <<nobr>> <<if $laundering_fronts is undefined>> <<set $laundering_fronts to { arcade: { owned: ($laundering_level >= 1), level: 1, capacity: 6 }, gallery: { owned: ($laundering_level >= 2), level: 1, capacity: 4 }, bank: { owned: ($laundering_level >= 3), level: 1, capacity: 2 } }>> <</if>> <<set _arcade_count to 0, _gallery_count to 0, _bank_count to 0>> <<for _k to 0; _k < $network_girls.length; _k++>> <<if $network_girls[_k].location is "arcade">><<set _arcade_count += 1>><</if>> <<if $network_girls[_k].location is "gallery">><<set _gallery_count += 1>><</if>> <<if $network_girls[_k].location is "bank">><<set _bank_count += 1>><</if>> <</for>> <<set _staffHeatDrop to (_arcade_count * 1) + (_gallery_count * 2) + (_bank_count * 3)>> <div style="border: 2px solid #aa00ff; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;"> <img src="images/bg/neon.png" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> High above the Neon Strip, the soundproof glass offices of Apex Management smell of espresso and shredded legal documents. <br><br> <strong>Street Cash (Confiscatable):</strong> $<<print $money>> | <strong>Offshore Laundered Funds (Protected):</strong> <span style="color: #00ffaa;">$<<print $laundered_money>></span><br> <strong>Current Heat:</strong> <span style="color: #ffaa00;"><<print $heat>>%</span> | <strong>Nightly Staff Heat Scrubbing:</strong> <span style="color: #00ffaa;">-<<print _staffHeatDrop>>% Heat / night</span> <hr style="border-color: #444;"> <<if $laundering_log is undefined>><<set $laundering_log to "">><</if>> <<if $laundering_log isnot "">> <div style="background-color: #1a1a2e; padding: 10px; border-left: 3px solid #00ffaa; margin-bottom: 15px;"> $laundering_log </div> <</if>> /* --- 1. LES 3 ENTREPRISES DE BLANCHIMENT (PLACES DE TRAVAIL LIMITÉES) --- */ <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #aa00ff; margin-bottom: 20px;"> <h4>🏢 Legitimate Front Businesses (Assign Girls via Smartphone -> Empire App)</h4> Assigning your employees to work in your money laundering fronts generates steady legitimate income (more than the tier below, less than the prostitution counterpart) while actively scrubbing your police Heat every night!<br><br> /* TIER 1 : NEON ARCADE */ <div style="background-color: #111; padding: 12px; border-left: 3px solid #00aaff; margin-bottom: 12px;"> <strong>🕹️ Tier 1 — Neon Arcade Front</strong><br> <span style="font-size: 0.9em; color: #aaa;">Earnings: Higher than Street, lower than Streaming Hangar (1.25x Base) | Scrubs <strong>-1% Heat / night per girl</strong> | Sets Offshore Fee to 15%.</span><br> <<if $laundering_fronts.arcade.owned is false>> <strong>Acquisition Price:</strong> $15,000 Clean Offshore Funds (or Street Cash)<br> <<if $laundered_money >= 15000>> <<link "[ Purchase Neon Arcade ($15,000 Offshore Funds) ]">> <<set $laundered_money -= 15000>> <<set $laundering_fronts.arcade.owned to true>> <<set $laundering_level to Math.max($laundering_level, 1)>> <<set $pr_agency_owned to true>> <<set $laundering_log to "You acquired the Neon Arcade using Clean Offshore Funds! You can now assign up to 6 girls to work there from your Smartphone Empire App (-1% Heat/night per girl).">> <<goto "Neon_Laundering">> <</link>> <<elseif $money >= 15000>> <<link "[ Purchase Neon Arcade ($15,000 Street Cash) ]">> <<set $money -= 15000>> <<set $laundering_fronts.arcade.owned to true>> <<set $laundering_level to Math.max($laundering_level, 1)>> <<set $pr_agency_owned to true>> <<set $laundering_log to "You acquired the Neon Arcade! You can now assign up to 6 girls to work there from your Smartphone Empire App (-1% Heat/night per girl).">> <<goto "Neon_Laundering">> <</link>> <<else>> <span style="color: #888;">[ Requires $15,000 Clean Offshore Funds or Cash ]</span> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[ Operational — Lv. <<print $laundering_fronts.arcade.level>> ]</strong></span> | <strong>Working Spots:</strong> <<print _arcade_count>> / <<print $laundering_fronts.arcade.capacity>> filled (-<<print _arcade_count>>% Heat/night)<br> <<set _upCost1 to $laundering_fronts.arcade.level * 8000>> <<if $laundered_money >= _upCost1>> <<link `"[ Expand Arcade Floor (+3 Working Spots — $" + _upCost1 + " Offshore) ]"`>> <<set $laundered_money -= _upCost1>> <<set $laundering_fronts.arcade.capacity += 3>> <<set $laundering_fronts.arcade.level += 1>> <<set $laundering_log to "Expanded Neon Arcade capacity to " + $laundering_fronts.arcade.capacity + " working spots using Clean Offshore Funds.">> <<goto "Neon_Laundering">> <</link>> <<else>> <span style="color: #888;">[ Upgrade Capacity (+3 Spots): Requires $<<print _upCost1>> in Clean Offshore Funds ]</span> <</if>> <</if>> </div> /* TIER 2 : LUXURY ART GALLERY */ <div style="background-color: #111; padding: 12px; border-left: 3px solid #ff55aa; margin-bottom: 12px;"> <strong>🖼️ Tier 2 — Luxury Art Gallery</strong><br> <span style="font-size: 0.9em; color: #aaa;">Earnings: Higher than Hangar, lower than Velvet Rose Brothel (1.75x Base) | Scrubs <strong>-2% Heat / night per girl</strong> | Sets Offshore Fee to 10% & unlocks Brothel Lobbying. (Girls need Lv.1+ Wardrobe).</span><br> <<if $laundering_fronts.gallery.owned is false>> <strong>Acquisition Price:</strong> $40,000 Clean Offshore Funds (or Street Cash)<br> <<if $laundering_fronts.arcade.owned is false>> <span style="color: #888;">[ Requires Neon Arcade Front First ]</span> <<elseif $laundered_money >= 40000>> <<link "[ Purchase Luxury Art Gallery ($40,000 Offshore Funds) ]">> <<set $laundered_money -= 40000>> <<set $laundering_fronts.gallery.owned to true>> <<set $laundering_level to Math.max($laundering_level, 2)>> <<set $empire_properties.brothel.lobbying_done to true>> <<set $laundering_log to "You opened the Luxury Art Gallery using Clean Offshore Funds and secured City Hall lobbying! Assign girls via your Smartphone (-2% Heat/night per girl).">> <<goto "Neon_Laundering">> <</link>> <<elseif $money >= 40000>> <<link "[ Purchase Luxury Art Gallery ($40,000 Street Cash) ]">> <<set $money -= 40000>> <<set $laundering_fronts.gallery.owned to true>> <<set $laundering_level to Math.max($laundering_level, 2)>> <<set $empire_properties.brothel.lobbying_done to true>> <<set $laundering_log to "You opened the Luxury Art Gallery and secured City Hall lobbying! Assign girls via your Smartphone (-2% Heat/night per girl).">> <<goto "Neon_Laundering">> <</link>> <<else>> <span style="color: #888;">[ Requires $40,000 Clean Offshore Funds or Cash ]</span> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[ Operational — Lv. <<print $laundering_fronts.gallery.level>> ]</strong></span> | <strong>Working Spots:</strong> <<print _gallery_count>> / <<print $laundering_fronts.gallery.capacity>> filled (-<<print (_gallery_count * 2)>>% Heat/night)<br> <<set _upCost2 to $laundering_fronts.gallery.level * 15000>> <<if $laundered_money >= _upCost2>> <<link `"[ Expand Gallery Wings (+2 Working Spots — $" + _upCost2 + " Offshore) ]"`>> <<set $laundered_money -= _upCost2>> <<set $laundering_fronts.gallery.capacity += 2>> <<set $laundering_fronts.gallery.level += 1>> <<set $laundering_log to "Expanded Luxury Art Gallery capacity to " + $laundering_fronts.gallery.capacity + " working spots using Clean Offshore Funds.">> <<goto "Neon_Laundering">> <</link>> <<else>> <span style="color: #888;">[ Upgrade Capacity (+2 Spots): Requires $<<print _upCost2>> in Clean Offshore Funds ]</span> <</if>> <</if>> </div> /* TIER 3 : CAYMAN HOLDING BANK */ <div style="background-color: #111; padding: 12px; border-left: 3px solid #ffd700;"> <strong>🏦 Tier 3 — Cayman Holding Bank</strong><br> <span style="font-size: 0.9em; color: #aaa;">Earnings: Higher than Brothel, lower than VIP Escort Platform (2.35x Base) | Scrubs <strong>-3% Heat / night per girl</strong> | Sets Offshore Fee to 5%. (Girls need Lv.2 Luxury Wardrobe).</span><br> <<if $laundering_fronts.bank.owned is false>> <strong>Acquisition Price:</strong> $100,000 Clean Offshore Funds (or Street Cash)<br> <<if $laundering_fronts.gallery.owned is false>> <span style="color: #888;">[ Requires Luxury Art Gallery First ]</span> <<elseif $laundered_money >= 100000>> <<link "[ Establish Cayman Holding Bank ($100,000 Offshore Funds) ]">> <<set $laundered_money -= 100000>> <<set $laundering_fronts.bank.owned to true>> <<set $laundering_level to 3>> <<set $laundering_log to "You established the Cayman Holding Bank using Clean Offshore Funds! Assign elite girls via your Smartphone (-3% Heat/night per girl).">> <<goto "Neon_Laundering">> <</link>> <<elseif $money >= 100000>> <<link "[ Establish Cayman Holding Bank ($100,000 Street Cash) ]">> <<set $money -= 100000>> <<set $laundering_fronts.bank.owned to true>> <<set $laundering_level to 3>> <<set $laundering_log to "You established the Cayman Holding Bank! Assign elite girls via your Smartphone (-3% Heat/night per girl).">> <<goto "Neon_Laundering">> <</link>> <<else>> <span style="color: #888;">[ Requires $100,000 Clean Offshore Funds or Cash ]</span> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[ Operational — Lv. <<print $laundering_fronts.bank.level>> ]</strong></span> | <strong>Executive Spots:</strong> <<print _bank_count>> / <<print $laundering_fronts.bank.capacity>> filled (-<<print (_bank_count * 3)>>% Heat/night)<br> <<set _upCost3 to $laundering_fronts.bank.level * 25000>> <<if $laundered_money >= _upCost3>> <<link `"[ Open Private Wealth Suite (+1 Executive Spot — $" + _upCost3 + " Offshore) ]"`>> <<set $laundered_money -= _upCost3>> <<set $laundering_fronts.bank.capacity += 1>> <<set $laundering_fronts.bank.level += 1>> <<set $laundering_log to "Expanded Cayman Holding Bank capacity to " + $laundering_fronts.bank.capacity + " executive spots using Clean Offshore Funds.">> <<goto "Neon_Laundering">> <</link>> <<else>> <span style="color: #888;">[ Upgrade Capacity (+1 Spot): Requires $<<print _upCost3>> in Clean Offshore Funds ]</span> <</if>> <</if>> </div> </div> /* --- 2. TRANSFERT VERS LE COMPTE OFFSHORE (FONDS BLANCHIS) --- */ <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #00ffaa; margin-bottom: 20px;"> <h4>💼 Wash Street Cash into Clean Offshore Funds</h4> Laundered money is completely untraceable: it is <strong>never seized when you are arrested</strong> and can be used to <strong>bribe prison guards</strong> or withdraw back into street cash at any time.<br><br> <<set _feePct to ($laundering_fronts.bank.owned ? 5 : ($laundering_fronts.gallery.owned ? 10 : ($laundering_fronts.arcade.owned ? 15 : 25)))>> <strong>Current Laundering Fee:</strong> _feePct%<br><br> <<if $money >= 1000>> <<link `"[ Launder $1,000 (Receive $" + Math.floor(1000 * (100 - _feePct) / 100) + " Clean) ]"`>> <<set $money -= 1000>> <<set _clean to Math.floor(1000 * (100 - _feePct) / 100)>> <<set $laundered_money += _clean>> <<set $laundering_log to "Laundered $1,000 into $" + _clean + " clean offshore funds.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> <<if $money >= 2500>> <<link `"[ Launder $2,500 (Receive $" + Math.floor(2500 * (100 - _feePct) / 100) + " Clean) ]"`>> <<set $money -= 2500>> <<set _clean to Math.floor(2500 * (100 - _feePct) / 100)>> <<set $laundered_money += _clean>> <<set $laundering_log to "Laundered $2,500 into $" + _clean + " clean offshore funds.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> <<if $money >= 5000>> <<link `"[ Launder $5,000 (Receive $" + Math.floor(5000 * (100 - _feePct) / 100) + " Clean) ]"`>> <<set $money -= 5000>> <<set _clean to Math.floor(5000 * (100 - _feePct) / 100)>> <<set $laundered_money += _clean>> <<set $laundering_log to "Laundered $5,000 into $" + _clean + " clean offshore funds.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> <<if $money >= 10000>> <<link `"[ Launder $10,000 (Receive $" + Math.floor(10000 * (100 - _feePct) / 100) + " Clean) ]"`>> <<set $money -= 10000>> <<set _clean to Math.floor(10000 * (100 - _feePct) / 100)>> <<set $laundered_money += _clean>> <<set $laundering_log to "Laundered $10,000 into $" + _clean + " clean offshore funds.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> <<if $money >= 50000>> <<link `"[ Launder $50,000 (Receive $" + Math.floor(50000 * (100 - _feePct) / 100) + " Clean) ]"`>> <<set $money -= 50000>> <<set _clean to Math.floor(50000 * (100 - _feePct) / 100)>> <<set $laundered_money += _clean>> <<set $laundering_log to "Laundered $50,000 into $" + _clean + " clean offshore funds.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> <<if $money >= 500>> <<link `"[ Launder All Street Cash ($" + $money + " -> Receive $" + Math.floor($money * (100 - _feePct) / 100) + " Clean) ]"`>> <<set _rawAll to $money>> <<set _cleanAll to Math.floor(_rawAll * (100 - _feePct) / 100)>> <<set $money to 0>> <<set $laundered_money += _cleanAll>> <<set $laundering_log to "Laundered your entire street wallet ($" + _rawAll + ") into $" + _cleanAll + " clean offshore funds.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> <<if $laundered_money >= 5000>> <br> <<link "[ Withdraw $5,000 from Offshore to Wallet (0% Fee) ]">> <<set $laundered_money -= 5000>> <<set $money += 5000>> <<set $laundering_log to "Withdrew $5,000 from your offshore account into street cash.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> <<if $laundered_money >= 25000>> <<link "[ Withdraw $25,000 from Offshore to Wallet (0% Fee) ]">> <<set $laundered_money -= 25000>> <<set $money += 25000>> <<set $laundering_log to "Withdrew $25,000 from your offshore account into street cash.">> <<goto "Neon_Laundering">> <</link>><br> <</if>> </div> /* --- 3. CONTRATS HEBDOMADAIRES D'APEX MANAGEMENT (POUR BAISSER LA HEAT) --- */ <<if $last_apex_contract_day is undefined>> <<set $last_apex_contract_day to -7>> <<set $apex_contracts to []>> <<set $apex_contract_completed to false>> <</if>> <<if $counters.apex_contracts is undefined>><<set $counters.apex_contracts to 0>><</if>> <<set _currentDay to Math.floor($time / 1440)>> <<set _apexContractPool to [ { id: "str", stat: "Strength", title: "Silence a Corporate Whistleblower", desc: "Corner a rogue corporate auditor in an underground parking structure and physically persuade him to destroy his testimony.", req: 11 }, { id: "int", stat: "Intelligence", title: "Spoof Federal Subpoena Ledgers", desc: "Work alongside Apex's forensic accountants to reroute shell-company wire trails and blind federal investigators.", req: 11 }, { id: "cha", stat: "Charisma", title: "Charm the District Attorney's Aide", desc: "Host a private champagne reception to seduce and win over a key prosecutor's aide, burying active case files.", req: 11 } ]>> <<if _currentDay >= $last_apex_contract_day + 7>> <<set $last_apex_contract_day to _currentDay>> <<set $apex_contract_completed to false>> <<set _poolCopy to clone(_apexContractPool)>> <<set $apex_contracts to []>> <<set _numChoices to ($traits.cleaner_2 is true ? 3 : 2)>> <<for _c to 0; _c < _numChoices; _c++>> <<run $apex_contracts.push(_poolCopy.pluck())>> <</for>> <<elseif $traits.cleaner_2 is true and $apex_contracts.length < 3 and $apex_contract_completed is false>> <<set $apex_contracts to clone(_apexContractPool)>> <</if>> <<set _apexHeatPct to ($traits.cleaner_3 is true ? 40 : ($traits.cleaner_2 is true ? 30 : ($traits.cleaner_1 is true ? 22 : 15)))>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #00aaff; margin-bottom: 20px;"> <h4>📋 Weekly Apex Favor Contract (Stat-Based Heat Scrubbing)</h4> Perform a high-level off-the-books favor for Apex Management's corporate partners once a week. In return, their legal fixer team will erase <strong>-<<print _apexHeatPct>>% Heat</strong> from your police dossier.<br> <<if $traits.cleaner_3 is true>> <span style="color: #00ffaa; font-size: 0.85em;"><strong>[ Perk Active: Untouchable (Apex Lv.3) — 3 Contract Choices & -40% Heat Scrubbed ]</strong></span><br> <<elseif $traits.cleaner_2 is true>> <span style="color: #00ffaa; font-size: 0.85em;"><strong>[ Perk Active: Spin Doctor (Apex Lv.2) — 3 Contract Choices & -30% Heat Scrubbed ]</strong></span><br> <<elseif $traits.cleaner_1 is true>> <span style="color: #00ffaa; font-size: 0.85em;"><strong>[ Perk Active: Corporate Cleaner (Apex Lv.1) — -22% Heat Scrubbed ]</strong></span><br> <</if>> <br> <<if $apex_contract_completed is true>> <<set _apexDaysLeft to ($last_apex_contract_day + 7) - _currentDay>> <span style="color: #ffaa00;"><em>"You already handled our priority dossier for this week. Come back in <strong>_apexDaysLeft day(s)</strong> for a new corporate assignment."</em></span> <<elseif $stamina < 25>> <span style="color: #ff4444;"><em>You need at least 25 Stamina to execute an Apex favor contract.</em></span> <<else>> <strong>Choose 1 Contract for this Week (Costs 25 Stamina, Takes 1 Hour):</strong><br><br> <<for _idx to 0; _idx < $apex_contracts.length; _idx++>> <<set _ac to $apex_contracts[_idx]>> <<capture _ac, _apexHeatPct>> <div style="background-color: #111; padding: 12px; margin-bottom: 10px; border: 1px solid #333; border-left: 3px solid #00aaff;"> <strong><<print _ac.title>></strong> <span style="font-size: 0.8em; background-color: #222; color: #ffaa00; padding: 2px 6px; border-radius: 3px;">Stat Check: <<print _ac.stat>></span> <span style="font-size: 0.85em; color: #00ffaa; font-weight: bold;">Reward: -<<print _apexHeatPct>>% Heat</span><br> <span style="font-size: 0.85em; color: #aaa;"><em><<print _ac.desc>></em></span><br><br> <<link `"[ Execute " + _ac.stat + " Contract (-25 Stamina, 1 hr) ]"`>> <<set _oldTime to $time>> <<set $time += 60>> <<set $stamina -= 25>> <<set $apex_contract_completed to true>> <<set _statVal to (_ac.id is "str" ? $strength : (_ac.id is "int" ? $intelligence : $charisma))>> <<set _goCharmSex to false>> <<if random(1, 10) + _statVal >= _ac.req>> <<set $heat to Math.max(0, $heat - _apexHeatPct)>> <<set $counters.apex_contracts += 1>> <<addXP 30>> <<set $last_apex_heat_scrubbed to _apexHeatPct>> <<set $laundering_log to "<span style='color: #00ffaa;'><strong>Apex Contract Success (" + _ac.title + "):</strong> You executed the favor flawlessly using your " + _ac.stat + ". Apex's legal team immediately wiped <strong>-" + _apexHeatPct + "% Heat</strong> from your record (+30 XP)!</span>">> <<if _ac.id is "cha">> <<set $apex_office_step to "bj">> <<set $apex_office_log to "After a few glasses of vintage champagne in Apex's private penthouse suite, the District Attorney's aide locks the boardroom door and drops to her knees in front of you...">> <<set _goCharmSex to true>> <</if>> <<else>> <<set $heat to Math.max(0, $heat - 5)>> <<set $laundering_log to "<span style='color: #ffaa00;'><strong>Apex Contract Complication (" + _ac.title + "):</strong> Your " + _ac.stat + " check fell short and the operation got messy. Apex's lawyers could only scrub <strong>-5% Heat</strong> to cover your tracks.</span>">> <</if>> <<if _goCharmSex is true>> <<goto "Apex_Charm_Sex">> <<elseif Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Neon_Laundering">> <</if>> <</link>> </div> <</capture>> <</for>> <</if>> </div> /* --- 4. RÉDUCTION ACTIVE DE HEAT & LOBBYING --- */ <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #ffaa00; margin-bottom: 20px;"> <h4>🕵️ Crisis PR & Political Bribes</h4> <<if $heat > 0>> <<if $laundered_money >= 3000>> <<link "[ Wire Retainer to Apex Legal Fixers ($3,000 Offshore -> -15% Heat) ]">> <<set $laundered_money -= 3000>> <<set $heat to Math.max(0, $heat - 15)>> <<set $laundering_log to "Apex PR scrubbed police databases and planted cover stories (-15% Heat).">> <<goto "Neon_Laundering">> <</link>><br> <<elseif $money >= 3000>> <<link "[ Plant Fake News & Bribe Precinct Captains ($3,000 Cash -> -15% Heat) ]">> <<set $money -= 3000>> <<set $heat to Math.max(0, $heat - 15)>> <<set $laundering_log to "Apex PR scrubbed police databases and planted cover stories (-15% Heat).">> <<goto "Neon_Laundering">> <</link>><br> <<else>> <span style="color: #888;">[ Scrub Police Records (-15% Heat) — Requires $3,000 Clean Offshore Funds or Cash ]</span><br> <</if>> <<else>> <span style="color: #00ffaa;"><em>Your Heat is currently at 0%.</em></span><br> <</if>> <<if $empire_properties.brothel.lobbying_done is false>> <br> <<if $laundered_money >= 15000>> <<link "[ Wire Bribe to City Hall from Offshore Trust ($15,000 Offshore) ]">> <<set $laundered_money -= 15000>> <<set $empire_properties.brothel.lobbying_done to true>> <<set $laundering_log to "Political cover secured via offshore wire! You can now purchase The Velvet Rose Brothel on Shadow Real Estate.">> <<goto "Neon_Laundering">> <</link>><br> <<elseif $money >= 15000>> <<link "[ Bribe City Hall Zoning Board for Brothel License ($15,000 Cash) ]">> <<set $money -= 15000>> <<set $empire_properties.brothel.lobbying_done to true>> <<set $laundering_log to "Political cover secured! You can now purchase The Velvet Rose Brothel on Shadow Real Estate.">> <<goto "Neon_Laundering">> <</link>> <<else>> <span style="color: #888;">[ Bribe City Hall for Brothel License — Requires $15,000 Clean Offshore Funds or Cash ]</span> <</if>> <</if>> </div> <hr style="border-color: #444;"> <<link "Leave Apex Management">> <<set $laundering_log to "">> <<goto "Neon">> <</link>> <</nobr>>
<h3>⚠️ TURF WAR AMBUSH!</h3> <<nobr>> <<set _targetDist to ($war_state.target_district isnot "none" ? $war_state.target_district : "Projects")>> <<set _fac to $factions[_targetDist]>> <<if _targetDist is "Projects">> <<set _ambushImg to "images/combat/street thug" + random(1, 5) + ".jpg">> <<elseif _targetDist is "Slums">> <<set _ambushImg to "images/combat/streetpunk" + random(1, 8) + ".jpg">> <<elseif _targetDist is "Port">> <<set _ambushImg to "images/combat/ambush.jpg">> <<elseif _targetDist is "Financial">> <<set _ambushImg to "images/combat/forces2.jpg">> <<else>> <<set _ambushImg to "images/combat/criminal" + random(1, 8) + ".jpg">> <</if>> <div style="display: flex; gap: 10px; justify-content: center; align-items: center; border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px; flex-wrap: wrap;"> <img @src="_ambushImg" style="max-width: 48%; max-height: 220px; border-radius: 3px;"> <img src="images/combat/fight2.gif" style="max-width: 48%; max-height: 220px; border-radius: 3px;"> </div> As you travel through the streets toward <strong><<print $destination>></strong>, a blacked-out vehicle screeches across the intersection, blocking your path! <br><br> Armed hitmen from the <strong><<print _fac.name>></strong> jump out with weapons drawn. <em>"Send our regards to the boss—light him up!"</em> <br><br> <<set _ambushHp to 60 + Math.floor(_fac.defense * 0.6)>> <<set _ambushStr to 5 + Math.floor(_fac.max_defense / 30)>> <<set $enemy to { name: _fac.name + " Hit Squad", hp: _ambushHp, max_hp: _ambushHp, strength: _ambushStr, img: _ambushImg, action_gif: "images/combat/fight2.gif" }>> <<set $combat_return_victory to "War_Ambush_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<if $active_firearm isnot "none" and ($gun_mag > 0 or $inventory.ammo > 0)>> <<link "🔫 Draw your " + $weapon_db[$active_firearm].name + " and return fire!">> <<set $player_cover to 1>> <<set $enemy_suppressed to false>> <<set $combat_log to "You dive behind your vehicle's engine block and open fire on the " + _fac.name + " hit squad!">> <<goto "Gunfight_Main">> <</link>><br><br> <</if>> <<link "🗡️ Charge them in close-quarters combat!">> <<set $combat_log to "You rush the hit squad before they can steady their aim!">> <<goto "Combat_Main">> <</link>> <</nobr>>
<h3>Ambush Repelled!</h3> <<nobr>> <div style="border: 2px solid #00ffaa; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img src="images/combat/fight3.gif" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> </div> <<set _targetDist to ($war_state.target_district isnot "none" ? $war_state.target_district : "Projects")>> <<set _lootCash to random(350, 900)>> <<set _lootAmmo to random(6, 18)>> <<set $money += _lootCash>> <<set $inventory.ammo += _lootAmmo>> <<set $counters.combats_won += 1>> <<addXP 40>> <<if $factions[_targetDist] isnot undefined>> <<set $factions[_targetDist].defense to Math.max(0, $factions[_targetDist].defense - 10)>> <</if>> Smoke rises from the asphalt as the last of the hitmen falls. You quickly strip their pockets before police sirens get too close. <br><br> <span style="color: #00ffaa;"><strong>Spoils of War:</strong> +$<<print _lootCash>>, +<<print _lootAmmo>> Ammo rounds, and <strong>-10 Enemy Defense</strong> against <<print $factions[_targetDist].name>>!</span> <br><br> <<link "Continue to " + $destination>> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<goto $destination>> <</link>> <</nobr>>
<<nobr>> <<set _fac to $factions[$assault_district]>> <<if $war_state.assault_stage is undefined or $war_state.assault_stage < 1>> <<set $war_state.assault_stage to 1>> <</if>> /* Si le joueur vient de remporter l'étape 1 ou 2 du siège */ <<if $assault_stage_in_progress is true>> <<set $assault_stage_in_progress to false>> <<set $counters.combats_won += 1>> <<addXP 35>> <<set $war_state.assault_stage += 1>> <</if>> <<if $assault_district is "Projects">> <<set _bossImg to "images/combat/liltim.jpg">> <<elseif $assault_district is "Slums">> <<set _bossImg to "images/combat/rasputin.jpg">> <<elseif $assault_district is "Outskirts">> <<set _bossImg to "images/combat/sovietgirl.jpg">> <<elseif $assault_district is "Port">> <<set _bossImg to "images/combat/ambush.jpg">> <<elseif $assault_district is "Neon">> <<set _bossImg to "images/combat/psylocke.jpg">> <<elseif $assault_district is "Financial">> <<set _bossImg to "images/combat/rico.jpg">> <<else>> <<set _bossImg to "images/combat/forces.jpg">> <</if>> <<if $war_state.assault_stage is 1>> <<set _stageTitle to "Siege Stage 1 / 3: Fortified Courtyard & Gate Guards">> <<set _stageDesc to "Before you can reach " + _fac.boss + ", your strike team must breach the heavily sandbagged outer gates of the " + _fac.name + " compound.">> <<set _stageImg to "images/combat/criminal" + random(1, 8) + ".jpg">> <<set _stageEnemyName to _fac.name + " Gate Garrison">> <<set _stageHp to 100 + Math.floor(_fac.defense * 1.4)>> <<set _stageStr to 6 + Math.floor(_fac.max_defense / 40)>> <<set _nextVictoryPassage to "War_Assault_Start">> <<elseif $war_state.assault_stage is 2>> <<set _stageTitle to "Siege Stage 2 / 3: Inner Sanctum Praetorian Guard">> <<set _stageDesc to "The outer gates are breached! Inside the main hall, " + _fac.boss + "'s elite personal bodyguards lock down the stairwell with heavy weapons.">> <<set _stageImg to "images/combat/fighter" + random(1, 4) + ".jpg">> <<set _stageEnemyName to _fac.boss + "'s Elite Bodyguards">> <<set _stageHp to 135 + Math.floor(_fac.defense * 1.8)>> <<set _stageStr to 7 + Math.floor(_fac.max_defense / 32)>> <<set _nextVictoryPassage to "War_Assault_Start">> <<else>> <<set _stageTitle to "Siege Stage 3 / 3: Final Showdown — " + _fac.boss>> <<set _stageDesc to "You kick open the reinforced war-room doors. " + _fac.boss + " stands waiting with a custom weapon drawn. End their reign over " + $assault_district + "!">> <<set _stageImg to _bossImg>> <<set _stageEnemyName to _fac.boss + " (" + _fac.name + " Boss)">> <<set _stageHp to 175 + Math.floor(_fac.defense * 2.5)>> <<set _stageStr to 8 + Math.floor(_fac.max_defense / 26)>> <<set _nextVictoryPassage to "War_Assault_Win">> <</if>> <<if _fac.supply_sabotaged is true>> <<set _stageHp to Math.floor(_stageHp * 0.85)>> <<set _stageStr to Math.max(5, Math.floor(_stageStr * 0.85))>> <</if>> <<if _fac.informant_turned is true>> <<set _stageHp to Math.floor(_stageHp * 0.90)>> <</if>> <div style="max-width: 680px; margin: 10px auto; background: linear-gradient(165deg, #1f0a0a 0%, #0a0505 100%); border: 2px solid #ff3333; border-radius: 10px; padding: 20px;"> <div style="display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #4a1c1c; padding-bottom: 10px; margin-bottom: 14px;"> <div> <h3 style="margin: 0; color: #ff4444; text-transform: uppercase;">🏰 Stronghold Siege: <<print _fac.name>></h3> <span style="font-size: 0.85em; color: #ccc;">Boss: <strong><<print _fac.boss>></strong> | Remaining Defense: <strong style="color: #ffaa00;"><<print _fac.defense>> / <<print _fac.max_defense>></strong></span> </div> <span style="background: #ff3333; color: #fff; font-weight: 900; padding: 5px 12px; border-radius: 4px; font-size: 0.85em;">STAGE <<print $war_state.assault_stage>> / 3</span> </div> <<if $war_state.assault_stage > 1>> <div style="background: rgba(0, 255, 170, 0.08); border: 1px solid #00ffaa; padding: 10px 14px; border-radius: 6px; margin-bottom: 12px; color: #b9f6ca;"> ✅ <strong>Stage <<print ($war_state.assault_stage - 1)>> Breached!</strong> Reload your firearm and use any field meds before pushing deeper into the stronghold. </div> <</if>> <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 14px; background-color: #111; border-radius: 6px;"> <img @src="_stageImg" style="max-width: 100%; max-height: 250px; border-radius: 4px;"> </div> <h4 style="margin: 0 0 6px 0; color: #ffd700;"><<print _stageTitle>></h4> <p style="margin: 0 0 14px 0; color: #ddd; font-size: 0.92em;"><<print _stageDesc>></p> <div style="background: #140a0a; border: 1px solid #3d1c1c; border-radius: 6px; padding: 12px; margin-bottom: 14px; display: flex; justify-content: space-between; flex-wrap: wrap; gap: 10px; font-size: 0.9em;"> <div> <strong>Your Status:</strong><br> HP: <strong style="color: #ff4444;"><<print $hp>> / <<print $maxhp>></strong> | Stamina: <strong style="color: #00ffaa;"><<print $stamina>> / <<print $maxstamina>></strong> <<if $active_firearm isnot "none">> <br>Firearm: <strong><<print $weapon_db[$active_firearm].name>></strong> (Mag: <strong style="color:#ffaa00;"><<print $gun_mag>>/<<print $weapon_db[$active_firearm].mag_size>></strong> | Res: <<print $inventory.ammo>>) <</if>> </div> <div style="text-align: right;"> <strong>Enemy Force: <<print _stageEnemyName>></strong><br> HP: <strong style="color: #ff4444;"><<print _stageHp>></strong> | Firepower: <strong><<print _stageStr>></strong><br> <<if _fac.supply_sabotaged is true>><span style="color: #00e5ff; font-size: 0.82em;">[Sabotaged Supply: -15% Enemy Power]</span><br><</if>> <<if _fac.informant_turned is true>><span style="color: #00ffaa; font-size: 0.82em;">[Informant Intel: -10% HP & Heavy Cover]</span><</if>> </div> </div> /* ACTIONS RAPIDES ENTRE LES ÉTAPES */ <div style="background: #111; border: 1px dashed #444; border-radius: 6px; padding: 10px; margin-bottom: 16px;"> <strong style="font-size: 0.82em; color: #aaa; text-transform: uppercase;">🎒 Tactical Prep & Field Meds:</strong><br> <<if $active_firearm isnot "none" and $gun_mag < $weapon_db[$active_firearm].mag_size and $inventory.ammo > 0>> <<link "[ 🔄 Reload " + $weapon_db[$active_firearm].name + " ]">> <<set $gun_max_mag to $weapon_db[$active_firearm].mag_size>> <<set _need to $gun_max_mag - $gun_mag>> <<set _load to Math.min(_need, $inventory.ammo)>> <<set $gun_mag += _load>> <<set $inventory.ammo -= _load>> <<goto "War_Assault_Start">> <</link>> <</if>> <<if $inventory.energy_drink > 0 and $stamina < $maxstamina>> <<link "[ ⚡ Energy Drink (+20 Stamina, x" + $inventory.energy_drink + ") ]">> <<set $inventory.energy_drink -= 1>> <<set $stamina to Math.min($maxstamina, $stamina + 20)>> <<goto "War_Assault_Start">> <</link>> <</if>> <<if $inventory.weed > 0 and ($hp < $maxhp or $stamina < $maxstamina)>> <<link "[ 🌿 Smoke Joint (+25 HP, +15 Stamina, x" + $inventory.weed + ") ]">> <<set $inventory.weed -= 1>> <<set $hp to Math.min($maxhp, $hp + 25)>> <<set $stamina to Math.min($maxstamina, $stamina + 15)>> <<goto "War_Assault_Start">> <</link>> <</if>> <<if $inventory.heroin > 0 and $hp < $maxhp>> <<link "[ 💉 Field Morphine/Heroin (+60 HP, -20 Sta, x" + $inventory.heroin + ") ]">> <<set $inventory.heroin -= 1>> <<set $hp to Math.min($maxhp, $hp + 60)>> <<set $stamina to Math.max(0, $stamina - 20)>> <<goto "War_Assault_Start">> <</link>> <</if>> </div> <<set $enemy to { name: _stageEnemyName, hp: _stageHp, max_hp: _stageHp, strength: _stageStr, img: _stageImg, action_gif: "images/combat/fight3.gif" }>> <<set $combat_return_victory to _nextVictoryPassage>> <<set $combat_return_defeat to "Combat_Lose">> <div style="display: flex; flex-direction: column; gap: 10px;"> <<if $active_firearm isnot "none" and ($gun_mag > 0 or $inventory.ammo > 0)>> <<link `"🔫 Breach Stage " + $war_state.assault_stage + " with Firearms (Tactical Shootout)"`>> <<if $war_state.assault_stage < 3>><<set $assault_stage_in_progress to true>><</if>> <<set $player_cover to (_fac.informant_turned is true ? 2 : 1)>> <<set $enemy_suppressed to false>> <<set $combat_log to "You kick the doors open and unleash gunfire on " + _stageEnemyName + "!">> <<goto "Gunfight_Main">> <</link>> <</if>> <<link `"🗡️ Storm Stage " + $war_state.assault_stage + " in Close Combat"`>> <<if $war_state.assault_stage < 3>><<set $assault_stage_in_progress to true>><</if>> <<set $combat_log to "You lead a brutal close-quarters charge against " + _stageEnemyName + "!">> <<goto "Combat_Main">> <</link>> <<link "🏃♂️ Abort Siege and Fall Back">> <<set $war_state.assault_stage to 0>> <<set $assault_stage_in_progress to false>> <<set $combat_return_victory to "Combat_Win">> <<set $menu_return_passage to $current_location>> <<goto "Phone_EmpireApp">> <</link>> </div> </div> <</nobr>>
<h3>🏆 Territory Conquered: <<print $assault_district>>!</h3> <<nobr>> <div style="border: 2px solid #00ffaa; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img src="images/combat/forces2.jpg" style="max-width: 100%; max-height: 260px; border-radius: 3px;"> </div> <<set _fac to $factions[$assault_district]>> <<set $factions[$assault_district].conquered to true>> <<set $factions[$assault_district].control to 100>> <<set $factions[$assault_district].defense to 0>> <<set $war_state.active to false>> <<set $war_state.target_district to "none">> <<set $war_state.assault_stage to 0>> <<set $war_state.raid_wave to 0>> <<set $assault_stage_in_progress to false>> <<set _vaultLoot to _fac.tribute * 10>> <<set $money += _vaultLoot>> <<set $counters.combats_won += 1>> <<addXP 200>> <<if $assault_district is "Port">> /* Conquérir le Cartel affecte la réputation en prison */ <<set $prison_gang_rep.cartel -= 25>> <<elseif $assault_district is "Outskirts">> <<set $prison_gang_rep.aryan -= 25>> <</if>> <strong><<print _fac.boss>></strong> lies defeated on the floor as the surviving members of the <strong><<print _fac.name>></strong> throw down their weapons and swear fealty to your syndicate. <br><br> You crack open their stronghold vault and claim <strong>$<<print _vaultLoot>></strong> in cash! <br><br> <span style="color: #00ffaa;"><strong>District Seized:</strong> <strong><<print $assault_district>></strong> now pays you <strong>+$<<print _fac.tribute>> / day</strong> in passive protection tribute!</span> <br><br> <<link "Return to the Streets">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<set $menu_return_passage to $current_location>> <<goto $current_location>> <</link>> <</nobr>>
<h3>🚨 Penitentiary Booking & Evidence Seizure</h3> <<nobr>> <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img src="images/Sex/Police/cells.jpg" style="max-width: 100%; max-height: 250px; border-radius: 3px;"> </div> The heavy iron gates slam shut behind you. Under harsh fluorescent lights, correctional officers strip-search you and log every item in your possession into the precinct's <strong>Evidence Room</strong>. <br><br> /* Vérification de la présence du Corrupt Ex-Cop ("The Fixer") dans le gang */ <<set _hasFixer to false>> <<set _fixerName to "">> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].specialty is "Corrupt Ex-Cop">> <<set _hasFixer to true>> <<set _fixerName to $gang_members[_g].name>> <<break>> <</if>> <</for>> <<set _sentenceDays to Math.clamp(14 + Math.floor($heat / 5), 14, 28)>> <div style="background-color: #1a1111; padding: 15px; border-left: 4px solid #ff4444; margin-bottom: 20px;"> <strong>Booking Summary:</strong><br> - <strong>Assigned Sentence:</strong> _sentenceDays Days (2–4 Weeks)<br> - <strong>Assets to be Seized into Evidence Room:</strong> $<<print $money>> Cash, <<print $inventory.weapons.length>> Weapon(s), <<print ($inventory.ammo + $gun_mag)>> Ammo rounds, and all street narcotics.<br> - <strong>Protected Assets:</strong> $<<print $laundered_money>> Offshore Laundered Funds & <<print $inventory.cigarettes>> Pack(s) of Cigarettes smuggled into your cell block. </div> /* OPTION 1 : INFLUENCE EXTERNE (CORRUPT EX-COP "THE FIXER") */ <<if _hasFixer is true>> <div style="background-color: #1a2a1a; padding: 15px; border-left: 4px solid #ffd700; margin-bottom: 15px;"> <h4>🕵️ External Influence: "The Fixer" (<<print _fixerName>>)</h4> Your <strong>Corrupt Ex-Cop</strong> uses his old internal affairs credentials to tamper with the chain of custody and destroy the prosecutor's warrant before the judge signs your transfer! <br><br> <<link "[ Invoke 'The Fixer' — Dismiss Trial & Walk Free Immediately (-30% Heat) ]">> <<set $heat to Math.max(0, $heat - 30)>> <<goto "Financial">> <</link>> </div> <</if>> /* OPTION 2 : CONFISCATION ET INCARCÉRATION */ <<link "[ Submit to Booking & Enter Cell Block D ]">> /* Retour des balles du chargeur dans le stock avant saisie */ <<if $gun_mag > 0>> <<set $inventory.ammo += $gun_mag>> <<set $gun_mag to 0>> <</if>> /* Sauvegarde dans l'Evidence Room */ <<set $evidence_room to { active: true, money: $money, weapons: clone($inventory.weapons), active_melee: $active_melee, active_firearm: $active_firearm, ammo: $inventory.ammo, weed: $inventory.weed, cocaine: $inventory.cocaine, ecstasy: $inventory.ecstasy, crack: $inventory.crack, heroin: $inventory.heroin }>> /* Confiscation immédiate */ <<set $money to 0>> <<set $inventory.weapons to []>> <<set $active_melee to "none">> <<set $active_firearm to "none">> <<set $inventory.ammo to 0>> <<set $inventory.weed to 0>> <<set $inventory.cocaine to 0>> <<set $inventory.ecstasy to 0>> <<set $inventory.crack to 0>> <<set $inventory.heroin to 0>> /* Si le joueur n'a aucune cigarette, il en trouve 2 paquets cachés sous sa couchette */ <<if $inventory.cigarettes < 2>> <<set $inventory.cigarettes to 2>> <</if>> <<set $in_prison to true>> <<set $prison_days_left to _sentenceDays>> <<set $prison_sentence_total to _sentenceDays>> <<set $prison_routine_step to "cell">> <<set $prison_protection to "none">> <<set $prison_log to "You are thrown into Cell Block D. Your cash and weapons are locked in the Evidence Room. Inside these walls, <strong>Cigarettes</strong> are the only currency that matters.">> <<goto "Prison_Hub">> <</link>> <</nobr>>
<h3>⛓️ State Penitentiary — Cell Block D</h3> <<nobr>> <div style="border: 2px solid #555; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <<if $prison_routine_step is "yard">> <img src="images/Sex/Police/prison/manprison.jpg" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> <<elseif $prison_routine_step is "canteen">> <img src="images/Sex/Police/inside.jpg" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> <<else>> <img src="images/Sex/Police/cells.jpg" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> <</if>> </div> /* Calcul dynamique de l'hostilité des gangs internes selon les actions en ville */ <<set _aryanStanding to $prison_gang_rep.aryan + ($factions["Outskirts"].conquered ? -30 : 0)>> <<set _cartelStanding to $prison_gang_rep.cartel + ($factions["Port"].conquered ? -30 : 0)>> <div style="background-color: #111; border: 1px solid #444; padding: 12px; margin-bottom: 15px;"> <strong>Remaining Sentence:</strong> <span style="color: #ff4444;"><<print $prison_days_left>> Days</span> | <strong>Daily Schedule:</strong> <span style="color: #00aaff; text-transform: uppercase;"><<print $prison_routine_step>></span><br> <strong>Cigarettes (Prison Currency):</strong> <span style="color: #ffaa00;"><strong><<print $inventory.cigarettes>> Packs</strong></span> | <strong>Shanks:</strong> <<print $inventory.shank>> | <strong>Active Protection:</strong> <span style="color: #00ffaa;"><<print $prison_protection.toUpperFirst()>></span><br> <strong>Internal Gang Standing:</strong> Aryan Brotherhood: <<print (_aryanStanding >= 15 ? "<span style='color:#00ffaa;'>Allied (" + _aryanStanding + ")</span>" : (_aryanStanding < 0 ? "<span style='color:#ff4444;'>Hostile (" + _aryanStanding + ")</span>" : "Neutral (" + _aryanStanding + ")"))>> | Cartel Affiliates: <<print (_cartelStanding >= 15 ? "<span style='color:#00ffaa;'>Allied (" + _cartelStanding + ")</span>" : (_cartelStanding < 0 ? "<span style='color:#ff4444;'>Hostile (" + _cartelStanding + ")</span>" : "Neutral (" + _cartelStanding + ")"))>> </div> <<if $prison_log isnot undefined and $prison_log isnot "">> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ffaa00; margin-bottom: 15px;"> $prison_log </div> <</if>> /* Vérification si la peine est terminée */ <<if $prison_days_left <= 0>> <div style="background-color: #1a2a1a; padding: 15px; border: 2px solid #00ffaa; text-align: center;"> <h4>🔓 Sentence Completed!</h4> The guards unlock your cell door. Your time is up.<br><br> <<link "[ Collect Your Evidence Room Belongings & Walk Free ]">> <<set $release_method to "served">> <<goto "Prison_Release">> <</link>> </div> <<else>> /* ======================================================= */ /* 1. EMPLOI DU TEMPS IMPOSÉ (ROUTINE) */ /* ======================================================= */ <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #00aaff; margin-bottom: 20px;"> <<if $prison_routine_step is "cell">> <h4>🌅 Morning — Cell Block Inspection</h4> Sirens blare across Cell Block D as the steel doors clank open.<br><br> <<if $stamina >= 15>> <<link "[ Do Cell Push-ups & Conditioning (-15 Stamina -> +1 Strength progress) ]">> <<set $stamina -= 15>> <<set $counters.gym_workouts += 1>> <<set $prison_routine_step to "canteen">> <<set $prison_log to "You crank out hundreds of push-ups on the cold concrete floor before heading to the Canteen.">> <<goto "Prison_Hub">> <</link>><br> <</if>> <<if $stamina >= 20>> <<link "[ Clean Laundry & Scrub Cell Block (-20 Stamina -> Earn +2 Cigarette Packs) ]">> <<set $stamina -= 20>> <<set $inventory.cigarettes += 2>> <<set $prison_routine_step to "canteen">> <<set $prison_log to "You worked the morning laundry shift and pocketed <strong>+2 Packs of Cigarettes</strong>.">> <<goto "Prison_Hub">> <</link>><br> <</if>> <<link "[ Conserve Energy & Walk to the Canteen (+10 Stamina) ]">> <<set $stamina to Math.min($maxstamina, $stamina + 10)>> <<set $prison_routine_step to "canteen">> <<set $prison_log to "You rested on your bunk until the Canteen bell rang (+10 Stamina).">> <<goto "Prison_Hub">> <</link>> <<elseif $prison_routine_step is "canteen">> <h4>🍲 Midday — Prison Canteen</h4> Inmates crowd the metal benches. The Aryan Brotherhood holds the left wall; Cartel Affiliates control the kitchen line.<br><br> <<link "[ Eat Standard Prison Slop (+25 Stamina) & Head to the Yard ]">> <<set $stamina to Math.min($maxstamina, $stamina + 25)>> <<set $prison_routine_step to "yard">> /* Risque d'embuscade si gang hostile et pas de protection */ <<if (_aryanStanding < 0 or _cartelStanding < 0) and $prison_protection is "none" and random(1, 100) <= 45>> <<set $prison_log to "">> <<goto "Prison_Fight_Event">> <<else>> <<set $prison_log to "You eat your tray in silence, keeping your back to the wall (+25 Stamina).">> <<goto "Prison_Hub">> <</if>> <</link>><br> <<if $inventory.cigarettes >= 1>> <<link "[ Trade 1 Cigarette Pack for Double Protein Ration (+45 Stamina, +15 HP) ]">> <<set $inventory.cigarettes -= 1>> <<set $stamina to Math.min($maxstamina, $stamina + 45)>> <<set $hp to Math.min($maxhp, $hp + 15)>> <<set $prison_routine_step to "yard">> <<set $prison_log to "You slipped a pack of smokes to the kitchen trustee for a real meal (+45 Stamina, +15 HP).">> <<goto "Prison_Hub">> <</link>><br> <</if>> <<if $stamina >= 15>> <<link "[ Sneak into the Prison Library (Visit the Librarian - 15 Stamina) ]">> <<set $stamina -= 15>> <<set $prison_routine_step to "yard">> <<goto "Prison_Library_Event">> <</link>> <</if>> <<elseif $prison_routine_step is "yard">> <h4>🏋️ Afternoon — The Exercise Yard</h4> Under the watchtowers, inmates trade contraband, lift rusted iron, and settle blood debts.<br><br> /* Commerce en Cigarettes */ <strong>Yard Black Market (Cigarettes Only):</strong><br> <<if $inventory.cigarettes >= 5 and $inventory.shank is 0>> <<link "[ Buy Improvised Prison Shank (5 Cigarette Packs -> +10 Melee Dmg) ]">> <<set $inventory.cigarettes -= 5>> <<set $inventory.shank to 1>> <<set $prison_log to "You traded 5 packs of cigarettes for a sharpened steel shank.">> <<goto "Prison_Hub">> <</link>><br> <</if>> <<if $inventory.cigarettes >= 3>> <<link "[ Pay Aryan Brotherhood for Protection & Alliance (3 Cigarette Packs) ]">> <<set $inventory.cigarettes -= 3>> <<set $prison_gang_rep.aryan += 10>> <<set $prison_protection to "aryan">> <<set $prison_log to "The Aryan shot-caller nods as you hand over the smokes. His men will watch your back.">> <<goto "Prison_Hub">> <</link>><br> <<link "[ Pay Cartel Affiliates for Protection & Alliance (3 Cigarette Packs) ]">> <<set $inventory.cigarettes -= 3>> <<set $prison_gang_rep.cartel += 10>> <<set $prison_protection to "cartel">> <<set $prison_log to "The Cartel lieutenant accepts your tribute. You are under their wing in the block.">> <<goto "Prison_Hub">> <</link>><br> <</if>> <br> <strong>Yard Actions (Advances to Night Lockdown):</strong><br> <<if $stamina >= 25>> <<link "[ Fight in the Yard Pit for Cigarettes (-25 Stamina) ]">> <<set $stamina -= 25>> <<set $prison_routine_step to "night">> <<goto "Prison_Fight_Event">> <</link>><br> <</if>> <<if $stamina >= 20>> <<link "[ Smuggle Contraband in the Yard (-20 Stamina -> +3 Cigarette Packs) ]">> <<set $stamina -= 20>> <<set $inventory.cigarettes += 3>> <<set $prison_routine_step to "night">> <<set $prison_log to "You moved contraband packages across the yard without alerting the tower guards (+3 Cigarette Packs).">> <<goto "Prison_Hub">> <</link>><br> <</if>> <<link "[ Walk the Yard & Head to Night Lockdown (+10 Stamina) ]">> <<set $stamina to Math.min($maxstamina, $stamina + 10)>> <<set $prison_routine_step to "night">> <<set $prison_log to "You paced the yard, observing the guard shift rotations (+10 Stamina).">> <<goto "Prison_Hub">> <</link>> <<elseif $prison_routine_step is "night">> <h4>🌙 Night — Cell Lockdown</h4> The cell block is plunged into darkness.<br><br> <<link "[ Sleep Until Morning (-1 Day Sentence, Triggers Nightly City Tick) ]">> <<set $time += 1440>> <<set $prison_days_left -= 1>> <<set $stamina to $maxstamina>> <<set $hp to Math.min($maxhp, $hp + 20)>> <<endOfDayChecks>> <<set $prison_routine_step to "cell">> <<set $prison_log to "Another day behind bars scratched off the wall. (" + $prison_days_left + " days remaining).">> <<goto "Prison_Hub">> <</link>> <</if>> </div> /* ======================================================= */ /* 2. CONDITIONS DE LIBÉRATION & ÉVASION */ /* ======================================================= */ <div style="background-color: #221111; padding: 15px; border-left: 4px solid #ff4444; margin-bottom: 15px;"> <h4>🗝️ Release & Escape Routes</h4> /* Route A : Purger toute la peine d'un coup (Avance de plusieurs semaines + Déclin de l'empire) */ <strong>1. Serve Full Sentence Immediately (<<print $prison_days_left>> Days):</strong><br> <span style="font-size: 0.9em; color: #aaa;">Fast-forwards time by <<print $prison_days_left>> days. <strong>Warning:</strong> While you are locked up for weeks without supervision, your gang upkeep drains your accounts, and unsupervised captives/street workers will escape!</span><br> <<link `"[ ⏳ Serve Remaining " + $prison_days_left + " Days Now ]"`>> <<set $release_method to "fast_forward">> <<goto "Prison_Release">> <</link>> <br><br> /* Route B : Corruption d'un gardien avec Fonds Blanchis */ <strong>2. Bribe Corrupt Warden with Clean Offshore Funds ($25,000 Offshore):</strong><br> <span style="font-size: 0.9em; color: #aaa;">Requires pre-laundered funds ($<<print $laundered_money>> available). Releases you tonight and restores your Evidence Room stash!</span><br> <<if $laundered_money >= 25000>> <<link "[ 💼 Wire $25,000 Offshore Funds to Guard Captain -> Walk Out Tonight ]">> <<set $laundered_money -= 25000>> <<set $release_method to "bribe">> <<goto "Prison_Release">> <</link>> <<else>> <span style="color: #888;">[ Requires $25,000 Clean Offshore Money ]</span> <</if>> <br><br> /* Route C : Émeute et Évasion punitive */ <strong>3. Incite a Prison Riot & Break Out (Punishing Combat):</strong><br> <span style="font-size: 0.9em; color: #aaa;">Requires an Improvised Shank (or 10 Cigarette Packs to arm inmates) and 40 Stamina. If you lose, 7 days are added to your sentence!</span><br> <<if ($inventory.shank > 0 or $inventory.cigarettes >= 10) and $stamina >= 40>> <<link "[ 🔥 Trigger Cell Block Riot & Fight Your Way Out! ]">> <<if $inventory.shank is 0>><<set $inventory.cigarettes -= 10>><</if>> <<set $stamina -= 20>> <<set $enemy to { name: "Armored Riot Squad", hp: 140, max_hp: 140, strength: 8 }>> <<set $combat_return_victory to "Prison_Escape_Win">> <<set $combat_return_defeat to "Prison_Escape_Fail">> <<set $combat_log to "Alarms wail across the penitentiary as smoke grenades fill the block! The Armored Riot Squad blocks the main gate!">> <<goto "Combat_Main">> <</link>> <<else>> <span style="color: #888;">[ Requires 40+ Stamina and either a Prison Shank or 10 Cigarette Packs ]</span> <</if>> </div> <</if>> <</nobr>>
<h3>🥊 Prison Brawl!</h3> <<nobr>> <<set _fighterNum to random(1, 10)>> <<set _fighterImg to "images/combat/prisonfighter" + _fighterNum + ".jpg">> <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img @src="_fighterImg" style="max-width: 100%; max-height: 260px; border-radius: 3px;"> </div> A heavily tattooed inmate steps in front of you, cracking his knuckles as the guards look the other way. <br><br> <<set $enemy to { name: "Cell Block Enforcer", hp: random(55, 85), max_hp: 85, strength: random(4, 7), img: _fighterImg }>> <<set $combat_return_victory to "Prison_Fight_Win">> <<set $combat_return_defeat to "Prison_Fight_Lose">> <<link "Fight back!">> <<set $combat_log to "You square up on the concrete floor!">> <<goto "Combat_Main">> <</link>> <</nobr>>
<h3>Prison Brawl Won!</h3> <<nobr>> <<set _cigReward to random(3, 6)>> <<set $inventory.cigarettes += _cigReward>> <<set $counters.combats_won += 1>> <<set $prison_gang_rep.aryan += 3>> <<set $prison_gang_rep.cartel += 3>> <<addXP 25>> You slam the inmate onto the concrete floor. The watching prisoners cheer and toss packs of smokes at your feet! <br><br> <span style="color: #00ffaa;"><strong>Victory:</strong> Earned <strong>+<<print _cigReward>> Packs of Cigarettes</strong> and gained respect from the prison gangs!</span> <br><br> <<link "Return to Cell Block D">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<set $prison_log to "You won the brawl and earned " + _cigReward + " packs of cigarettes.">> <<goto "Prison_Hub">> <</link>> <</nobr>>
<h3>Beaten in the Block...</h3> <<nobr>> <<set $hp to 25>> <<set $counters.combats_lost += 1>> <<set _lostCigs to Math.min($inventory.cigarettes, 2)>> <<set $inventory.cigarettes -= _lostCigs>> You wake up in the infirmary with bruised ribs. Your opponent rifled through your pockets and took <<print _lostCigs>> pack(s) of cigarettes. <br><br> <<link "Limp back to Cell Block D">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<set $prison_log to "You were beaten in a prison fight and lost " + _lostCigs + " cigarette pack(s).">> <<goto "Prison_Hub">> <</link>> <</nobr>>
<h3>📚 Prison Library — Back Office</h3> <<nobr>> <<if $librarian_stage is undefined>><<set $librarian_stage to 0>><</if>> <<if $lib_scene is undefined>><<set $lib_scene to "intro">><</if>> /* --- AFFICHAGE VISUEL SELON L'ACTION ET LE STADE DE LA RELATION --- */ <div style="border: 2px solid #00aaff; padding: 8px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <<if $lib_scene is "intro">> <<if $librarian_stage is 0>> <div style="display: flex; gap: 10px; justify-content: center; align-items: center; flex-wrap: wrap;"> <img src="images/Sex/Police/prison/librarian/door.jpg" style="max-width: 48%; max-height: 260px; border-radius: 4px;"> <img src="images/Sex/Police/prison/librarian/librarian.jpg" style="max-width: 48%; max-height: 260px; border-radius: 4px;"> </div> <<elseif $librarian_stage is 1>> <img src="images/Sex/Police/prison/librarian/librarian lift skirt.jpg" style="max-width: 100%; max-height: 300px; border-radius: 4px;"> <<elseif $librarian_stage is 2>> <<set _undImg to either("librarian underwear.jpg", "librarian underwear 2.jpg", "librarian underwear 3.jpg")>> <img @src="'images/Sex/Police/prison/librarian/' + _undImg" style="max-width: 100%; max-height: 300px; border-radius: 4px;"> <<else>> <img src="images/Sex/Police/prison/librarian/librarian naked.jpg" style="max-width: 100%; max-height: 300px; border-radius: 4px;"> <</if>> <<elseif $lib_scene is "lift_skirt">> <img src="images/Sex/Police/prison/librarian/librarian lift skirt.jpg" style="max-width: 100%; max-height: 320px; border-radius: 4px;"> <<elseif $lib_scene is "underwear">> <<set _undImg to either("librarian underwear.jpg", "librarian underwear 2.jpg", "librarian underwear 3.jpg")>> <img @src="'images/Sex/Police/prison/librarian/' + _undImg" style="max-width: 100%; max-height: 320px; border-radius: 4px;"> <<elseif $lib_scene is "naked">> <img src="images/Sex/Police/prison/librarian/librarian naked.jpg" style="max-width: 100%; max-height: 320px; border-radius: 4px;"> <<elseif $lib_scene is "grope">> <<set _vid to random(1, 4)>> <video @src="'images/Sex/Police/prison/librarian/grope/' + _vid + '.mp4'" autoplay loop muted playsinline style="max-width: 100%; max-height: 340px; border-radius: 4px;"></video> <<elseif $lib_scene is "bj">> <<set _vid to either(5, 6, 7, 13, 14)>> <video @src="'images/Sex/Police/prison/librarian/bj/' + _vid + '.mp4'" autoplay loop muted playsinline style="max-width: 100%; max-height: 340px; border-radius: 4px;"></video> <<elseif $lib_scene is "sex">> <<set _vid to either(8, 9, 10, 11, 12, 15, 16, 17, 18)>> <video @src="'images/Sex/Police/prison/librarian/sex/' + _vid + '.mp4'" autoplay loop muted playsinline style="max-width: 100%; max-height: 340px; border-radius: 4px;"></video> <<elseif $lib_scene is "cum">> <video src="images/Sex/Police/prison/librarian/cum.mp4" autoplay loop muted playsinline style="max-width: 100%; max-height: 340px; border-radius: 4px;"></video> <</if>> </div> <div style="background-color: #111; border: 1px solid #333; padding: 15px; border-radius: 5px; margin-bottom: 15px;"> <strong>Librarian Relationship Stage:</strong> <span style="color: #ff55aa;">Stage <<print $librarian_stage>> / 4</span> <<if $librarian_stage is 0>>(Strict & Distant) <<elseif $librarian_stage is 1>>(Flirty — Lifts Her Skirt) <<elseif $librarian_stage is 2>>(Teasing — Strips to Underwear) <<elseif $librarian_stage is 3>>(Hands-On — Naked & Groping) <<else>>(Completely Yours — Full Access) <</if>> <hr style="border-color: #333;"> <<if $lib_log isnot undefined and $lib_log isnot "">> <div style="color: #eee; margin-bottom: 15px;">$lib_log</div> <<else>> <p style="margin-top: 0;">You slip through the heavy wooden door at the back of the quiet prison library. The librarian looks up from her desk, checking that no guards followed you inside.</p> <</if>> /* --- PROGRESSION DE LA RELATION AVEC LA BIBLIOTHÉCAIRE --- */ <<if $lib_scene isnot "cum">> <strong>Librarian Interactions:</strong><br><br> /* STAGE 0 -> 1 : LIFT SKIRT */ <<if $librarian_stage is 0>> <<link "[ Charm her / Slip 1 Cigarette Pack -> Ask for a peek (Advance to Stage 1) ]">> <<if $inventory.cigarettes >= 1>><<set $inventory.cigarettes -= 1>><</if>> <<set $librarian_stage to 1>> <<set $lib_scene to "lift_skirt">> <<set $stamina to Math.min($maxstamina, $stamina + 20)>> <<set $lib_log to "You lean against her desk, whispering smoothly. Blushing, she glances at the locked door and slowly lifts her skirt to give you an eyeful. <span style='color:#00ffaa;'>(+20 Stamina | Relationship -> Stage 1)</span>">> <<goto "Prison_Library_Event">> <</link>><br><br> /* STAGE 1 -> 2 : UNDERWEAR */ <<elseif $librarian_stage is 1>> <<link "[ Convince her to strip to her underwear (Advance to Stage 2) ]">> <<set $librarian_stage to 2>> <<set $lib_scene to "underwear">> <<set $stamina to Math.min($maxstamina, $stamina + 25)>> <<set $lib_log to "Her breathing quickens as you step closer behind the bookshelves. She unbuttons her blouse and steps out of her skirt, posing in her lingerie just for you. <span style='color:#00ffaa;'>(+25 Stamina | Relationship -> Stage 2)</span>">> <<goto "Prison_Library_Event">> <</link>><br><br> /* STAGE 2 -> 3 : NAKED & GROPE */ <<elseif $librarian_stage is 2>> <<link "[ Have her strip completely naked & grope her body (Advance to Stage 3) ]">> <<set $librarian_stage to 3>> <<set $lib_scene to "grope">> <<set $stamina to Math.min($maxstamina, $stamina + 30)>> <<set $lib_log to "She unhooks her bra and slides off her panties. You pull her naked body against yours, groping and squeezing her soft curves between the stacks. <span style='color:#00ffaa;'>(+30 Stamina | Relationship -> Stage 3)</span>">> <<goto "Prison_Library_Event">> <</link>><br><br> /* STAGE 3 -> 4 : BLOWJOB & FULL UNLOCK */ <<elseif $librarian_stage is 3>> <<link "[ Push her to her knees for a blowjob (Advance to Stage 4 — Full Access) ]">> <<set $librarian_stage to 4>> <<set $lib_scene to "bj">> <<set $stamina to Math.min($maxstamina, $stamina + 35)>> <<set $lib_log to "Unable to resist any longer, the librarian drops to her knees behind the desk and eagerly takes you into her mouth! <span style='color:#00ffaa;'>(+35 Stamina | Relationship Maxed -> Stage 4!)</span>">> <<goto "Prison_Library_Event">> <</link>><br><br> <</if>> /* MENU COMPLET DÈS LE STADE 3/4 */ <<if $librarian_stage >= 2>> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ff55aa; margin-bottom: 12px;"> <strong>Back-Office Fun:</strong><br> <<link "[ Show Off Underwear ]">> <<set $lib_scene to "underwear">> <<set $lib_log to "She models her tight underwear between the legal shelves.">> <<goto "Prison_Library_Event">> <</link>> | <<link "[ Strip Naked ]">> <<set $lib_scene to "naked">> <<set $lib_log to "She stands completely naked in the locked office, waiting for your touch.">> <<goto "Prison_Library_Event">> <</link>> <<if $librarian_stage >= 3>> | <<link "[ Grope & Fondle Her ]">> <<set $lib_scene to "grope">> <<set $lib_log to "You grab and knead her naked body while she moans softly into your shoulder.">> <<goto "Prison_Library_Event">> <</link>> <</if>> <<if $librarian_stage >= 4>> | <<link "[ Deep Blowjob ]">> <<set $lib_scene to "bj">> <<set $lib_log to "She worships your cock on her knees behind the circulation desk.">> <<goto "Prison_Library_Event">> <</link>> | <<link "[ Fuck Her in the Stacks ]">> <<set $lib_scene to "sex">> <<set $lib_log to "You bend the librarian over the stacks and pound her relentlessly while the books shake!">> <<goto "Prison_Library_Event">> <</link>> <br><br> <<link "💦 [ Finish Inside / Climax (+40 Stamina, +20 HP, -1 Day Sentence) ]">> <<set $lib_scene to "cum">> <<set $stamina to Math.min($maxstamina, $stamina + 40)>> <<set $hp to Math.min($maxhp, $hp + 20)>> <<set $prison_days_left to Math.max(1, $prison_days_left - 1)>> <<set $inventory.cigarettes += 2>> <<set $lib_log to "You climax hard after a wild session in the library back-office. Completely satisfied, she alters your good-behavior file and slips you 2 packs of cigarettes! <span style='color:#00ffaa;'>(+40 Stamina, +20 HP, -1 Day Sentence, +2 Cigarette Packs)</span>">> <<goto "Prison_Library_Event">> <</link>> <</if>> </div> <</if>> /* AUTRES ACTIONS DE LA BIBLIOTHÈQUE */ <hr style="border-color: #333;"> <strong>Other Library Activities:</strong><br> <<link "[ Study Criminal Law & Case Files (+1 Intelligence, -1 Day Sentence) ]">> <<set $intelligence += 1>> <<set $prison_days_left to Math.max(1, $prison_days_left - 1)>> <<unset $lib_scene>><<unset $lib_log>> <<set $prison_log to "You studied legal loopholes in the library (+1 Intelligence, -1 Day on Sentence).">> <<goto "Prison_Hub">> <</link>><br> <<link "[ Check Hollowed-Out Dictionary Dead-Drop (+3 Cigarette Packs) ]">> <<set $inventory.cigarettes += 3>> <<unset $lib_scene>><<unset $lib_log>> <<set $prison_log to "You recovered 3 packs of contraband cigarettes hidden in the law section.">> <<goto "Prison_Hub">> <</link>><br> <</if>> <br> <<link "Leave the Library and Head to the Yard">> <<unset $lib_scene>> <<unset $lib_log>> <<goto "Prison_Hub">> <</link>> </div> <</nobr>>
<h3>🔥 Riot Breakout Successful!</h3> <<nobr>> <div style="border: 2px solid #00ffaa; padding: 15px; background-color: #111; border-radius: 5px; text-align: center;"> <img src="images/combat/forces.jpg" style="max-width: 100%; max-height: 240px; border-radius: 3px; margin-bottom: 15px;"> <p>Sirens wail across the penitentiary as tear gas fills the yard. You slam the tactical commander into the chain-link fence, swipe his keycard, and sprint through the service tunnel while Cell Block D burns behind you!</p> <p style="color: #ffaa00; font-weight: bold;">⚠️ Because you broke out violently during a riot, your confiscated items remain locked inside the Financial District Police Station Evidence Room, and your Heat is spiked!</p> <<set $release_method to "riot">> <br> <<link "[ Escape into the Slums ]">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<goto "Prison_Release">> <</link>> </div> <</nobr>>
<h3>🚨 Escape Attempt Crushed!</h3> <<nobr>> <div style="border: 2px solid #ff4444; padding: 15px; background-color: #111; border-radius: 5px; text-align: center;"> <img src="images/combat/lostfight.webp" style="max-width: 100%; max-height: 240px; border-radius: 3px; margin-bottom: 15px;"> <p>Riot shields pin you against the concrete wall as shock batons rain down on your ribs. After dragging you out of solitary confinement, the warden personally signs off on extending your sentence by a full week.</p> <<set $hp to 25>> <<set $stamina to 15>> <<set $prison_days_left += 7>> <<set $inventory.shank to 0>> <<set $prison_routine_step to "cell">> <<set $counters.combats_lost += 1>> <p style="color: #ff4444; font-weight: bold;">+7 Days Added to Sentence | Shank Confiscated | HP Reduced to 25</p> <br> <<link "[ Thrown Back Into Your Cell ]">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<set $prison_log to "Your riot breakout failed! The warden added +7 days to your sentence and confiscated your shank.">> <<goto "Prison_Hub">> <</link>> </div> <</nobr>>
<<nobr>> <<set $in_prison to false>> <<set $prison_protection to "none">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <div style="max-width: 850px; margin: 0 auto; font-family: 'Segoe UI', sans-serif;"> <h2 style="text-align: center; color: #00ffaa; text-transform: uppercase; letter-spacing: 2px; border-bottom: 2px solid #00ffaa; padding-bottom: 10px;">🔓 BACK ON THE STREETS</h2> <div style="background: #111; border: 1px solid #333; padding: 20px; border-radius: 8px; margin-bottom: 20px; color: #ccc;"> <<if $release_method is "fast_forward" or $release_method is "served">> <<set _days_skipped to ($release_method is "fast_forward" ? Math.max(1, $prison_days_left) : 1)>> <<set $time += (_days_skipped * 1440)>> <<set $prison_days_left to 0>> <<set $heat to 0>> <h3 style="color: #ffaa00; margin-top: 0;">⏳ Time Served Report (<<print _days_skipped>> Days Elapsed)</h3> <p>You walk out the front gates of the State Penitentiary after serving your sentence. While you were locked up behind bars, your street empire suffered from the lack of direct leadership:</p> <ul style="line-height: 1.7;"> /* 1. Gang Upkeep Drain */ <<set _daily_upkeep to 0>> <<for _g to 0; _g < $gang_members.length; _g++>> <<set _daily_upkeep += $gang_members[_g].upkeep>> <</for>> <<set _total_upkeep to _daily_upkeep * _days_skipped>> <<if _total_upkeep > 0>> <<if $money >= _total_upkeep>> <<set $money -= _total_upkeep>> <li style="color: #ffaa00;">💸 <b>Gang Payroll:</b> Your crew drained <b>$<<print _total_upkeep>></b> from your accounts to cover daily wages while you were away.</li> <<else>> <<set $money to 0>> <li style="color: #ff4444;">🚨 <b>Payroll Default:</b> Your cash reserves ran dry! Gang loyalty plummeted across the board (-25 Loyalty).</li> <<for _i to $gang_members.length - 1; _i >= 0; _i-->> <<set $gang_members[_i].loyalty -= 25>> <<if $gang_members[_i].loyalty <= 0>> <li style="color: #ff4444;">❌ <b><<print $gang_members[_i].name>></b> deserted your crew while you were locked up!</li> <<run $gang_members.deleteAt(_i)>> <</if>> <</for>> <</if>> <</if>> /* 2. Unsupervised Captives Escape if no Warden */ <<set _has_warden to false>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "basement" and $gang_members[_g].specialty is "Warden">> <<set _has_warden to true>> <</if>> <</for>> <<if _has_warden is false and $basement_captives.length > 0>> <<set _escaped_cap to 0>> <<for _i to $basement_captives.length - 1; _i >= 0; _i-->> <<if $basement_captives[_i].discipline < 85 or random(1, 100) <= 60>> <<set _escaped_cap += 1>> <<run $basement_captives.deleteAt(_i)>> <</if>> <</for>> <<if _escaped_cap > 0>> <li style="color: #ff4444;">🔓 <b>Basement Breach:</b> Without a dedicated <b>Warden</b> supervising the cells, <b><<print _escaped_cap>> captive(s)</b> forced their locks and escaped!</li> <</if>> <<elseif _has_warden is true and $basement_captives.length > 0>> <li style="color: #00ffaa;">🔒 <b>Basement Secured:</b> Your assigned <b>Warden</b> kept all captives locked down during your sentence.</li> <</if>> /* 3. Unsupervised Street Workers Escape if no Street Captain */ <<set _has_captain to false>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "street" and $gang_members[_g].specialty is "Street Captain">> <<set _has_captain to true>> <</if>> <</for>> <<if _has_captain is false and $network_girls.length > 0>> <<set _runaways to 0>> <<for _i to $network_girls.length - 1; _i >= 0; _i-->> <<if $network_girls[_i].location is "street" and random(1, 100) <= 45>> <<set _runaways += 1>> <<run $network_girls.deleteAt(_i)>> <</if>> <</for>> <<if _runaways > 0>> <li style="color: #ff4444;">👠 <b>Empire Collapse:</b> Without a <b>Street Captain</b> enforcing order on the pavement, <b><<print _runaways>> working girl(s)</b> took their cut and vanished!</li> <</if>> <<elseif _has_captain is true and $network_girls.length > 0>> <li style="color: #00ffaa;">👑 <b>Street Order Maintained:</b> Your <b>Street Captain</b> kept your girls in line while you did your bid.</li> <</if>> /* 4. Legal Release returns cash & weapons from Evidence Room */ <<if $evidence_room isnot undefined and $evidence_room.active is true>> <<set _returned_cash to $evidence_room.money>> <<set $money += _returned_cash>> <<for _w to 0; _w < $evidence_room.weapons.length; _w++>> <<if not $inventory.weapons.includes($evidence_room.weapons[_w])>> <<run $inventory.weapons.push($evidence_room.weapons[_w])>> <</if>> <</for>> <<set $active_melee to $evidence_room.active_melee>> <<set $active_firearm to $evidence_room.active_firearm>> <<set $evidence_room.active to false>> <<set $evidence_room.money to 0>> <<set $evidence_room.weapons to []>> <li style="color: #00aaff;">📦 <b>Property Released:</b> The Release Desk returned your confiscated wallet (<b>$<<print _returned_cash>></b>) and gear. (Illicit narcotics were destroyed by the state).</li> <</if>> </ul> <<elseif $release_method is "bribe">> <<set $prison_days_left to 0>> <<set $heat to 15>> <h3 style="color: #00ffaa; margin-top: 0;">💼 Offshore Bribe Processed</h3> <p>The corrupt shift commander signs your transfer paperwork and escorts you out through the staff garage before dawn. Even better, he hands you the evidence bag containing every single item seized during your arrest!</p> <<if $evidence_room isnot undefined and $evidence_room.active is true>> <<set $money += $evidence_room.money>> <<for _w to 0; _w < $evidence_room.weapons.length; _w++>> <<if not $inventory.weapons.includes($evidence_room.weapons[_w])>> <<run $inventory.weapons.push($evidence_room.weapons[_w])>> <</if>> <</for>> <<set $active_melee to $evidence_room.active_melee>> <<set $active_firearm to $evidence_room.active_firearm>> <<set $inventory.ammo += $evidence_room.ammo>> <<set $inventory.weed += $evidence_room.weed>> <<set $inventory.cocaine += $evidence_room.cocaine>> <<set $inventory.ecstasy += $evidence_room.ecstasy>> <<set $inventory.crack += $evidence_room.crack>> <<set $inventory.heroin += $evidence_room.heroin>> <<set $evidence_room.active to false>> <<set $evidence_room.money to 0>> <<set $evidence_room.weapons to []>> <p style="color: #00ffaa; font-weight: bold;">✅ All confiscated cash, weapons, ammo, and narcotics have been restored to your inventory!</p> <</if>> <<elseif $release_method is "riot">> <<set $prison_days_left to 0>> <<set $heat to 65>> <h3 style="color: #ff4444; margin-top: 0;">🚨 Fugitive At Large</h3> <p>You ditch your orange jumpsuit in an alley in the Slums. You're free, and no days were lost—but the cops are actively hunting for you (<b>Heat set to 65%</b>), and your seized cash and arsenal are still sitting inside the <b>Financial District Police Station Evidence Room</b>!</p> <</if>> </div> <div style="text-align: center;"> <<set $current_location to "Slums">> <<link "[ Return to the Slums ]">><<goto "Slums">><</link>> </div> </div> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/77.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Vespera Menswear & Tactical Tailoring</h3> <<nobr>> <<if $inventory.outfits is undefined>><<set $inventory.outfits to []>><</if>> <<if $active_outfit is undefined>><<set $active_outfit to "none">><</if>> <<if $outfit_db is undefined>> <<set $outfit_db to { "street_hoodie": { name: "Street Hoodie & Cargo Pants", tier: "0-5", min_level: 1, price: 350, str: 0, int: 0, cha: 0, hp: 0, sta: 5, bonus_text: "+5 Max Stamina", desc: "Heavy dark cotton hoodie with reinforced cargo pants. Blends into the Projects while giving you room to move." }, "tracksuit": { name: "Neon Hustler Tracksuit", tier: "0-5", min_level: 2, price: 650, str: 0, int: 0, cha: 1, hp: 0, sta: 0, bonus_text: "+1 Charisma", desc: "Flashy designer tracksuit with a gold chain. Street dealers and working girls respect the look immediately." }, "biker_jacket": { name: "Reinforced Leather Biker Jacket", tier: "0-5", min_level: 4, price: 1200, str: 1, int: 0, cha: 0, hp: 5, sta: 0, bonus_text: "+1 Strength, +5 Max HP", desc: "Thick, scuffed cowhide leather jacket that absorbs knife slashes and brass-knuckle blows during street brawls." }, "tactical_vest": { name: "Concealed Kevlar & Tactical Rig", tier: "5-8", min_level: 5, price: 5000, str: 0, int: 0, cha: 0, hp: 15, sta: 5, bonus_text: "+15 Max HP, +5 Max Stamina", desc: "Lightweight ballistic vest worn beneath a dark combat shirt. Essential protection when turf wars and gunfights erupt." }, "club_blazer": { name: "Neon Strip Designer Blazer", tier: "5-8", min_level: 6, price: 7000, str: 0, int: 1, cha: 1, hp: 0, sta: 0, bonus_text: "+1 Charisma, +1 Intelligence", desc: "Silk shirt with an open velvet blazer and luxury watch. Turns heads in VIP clubs, hotels, and high-end brothels." }, "fixer_trench": { name: "Syndicate Fixer Trenchcoat", tier: "5-8", min_level: 7, price: 9500, str: 0, int: 1, cha: 1, hp: 10, sta: 0, bonus_text: "+1 Intelligence, +1 Charisma, +10 Max HP", desc: "Tailored wool trenchcoat with hidden holsters and lined pockets. Projects cold, calculated authority in dark web and cartel meetings." }, "italian_suit": { name: "Bespoke Italian Three-Piece Suit", tier: "8-15", min_level: 8, price: 18000, str: 0, int: 1, cha: 2, hp: 0, sta: 10, bonus_text: "+2 Charisma, +1 Intelligence, +10 Max Stamina", desc: "Hand-stitched Milanese wool suit. You look like a billionaire hedge-fund shark rather than a street criminal." }, "enforcer_armor": { name: "Heavy Mercenary Exo-Coat", tier: "8-15", min_level: 10, price: 28000, str: 2, int: 0, cha: 0, hp: 25, sta: 10, bonus_text: "+2 Strength, +25 Max HP, +10 Max Stamina", desc: "Military-grade trauma plates sewn into a reinforced leather duster. Built for surviving cartel ambushes and full-scale district assaults." }, "kingpin_suit": { name: "Armored Kingpin Pinstripe Suit", tier: "8-15", min_level: 12, price: 45000, str: 1, int: 2, cha: 2, hp: 20, sta: 10, bonus_text: "+2 Charisma, +2 Intelligence, +1 Strength, +20 Max HP, +10 Max Stamina", desc: "The pinnacle of underworld power: a custom-tailored pinstripe suit woven with ultra-light carbon-kevlar fibers, paired with a platinum timepiece." } }>> <</if>> From reinforced street hoodies in the front racks to bulletproof Italian bespoke suits behind velvet ropes in the VIP backroom, Vespera caters to men climbing the food chain of $city.<br><br> <div style="background-color: #161616; border: 1px solid #444; padding: 12px; border-radius: 5px; margin-bottom: 18px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;"> <div> <strong>Your Wallet:</strong> <span style="color: #00ffaa;">$<<print $money>></span> | <strong>Reputation:</strong> <span style="color: #ffaa00;">Lv.<<print $rep_level>></span> </div> <div> <strong>Currently Wearing:</strong> <<if $active_outfit is "none" or $outfit_db[$active_outfit] is undefined>> <span style="color: #888;">Basic Street Clothes (No Bonus)</span> <<else>> <span style="color: #00aaff;"><strong><<print $outfit_db[$active_outfit].name>></strong></span> <span style="color: #00ffaa; font-size: 0.85em;">(<<print $outfit_db[$active_outfit].bonus_text>>)</span> <<link "[ Unequip ]">><<unequipOutfit>><<goto "Mall_Clothing">><</link>> <</if>> </div> </div> <<set _tiers to [ { key: "0-5", title: "Tier 1: Streetwear & Tactical Basics (Levels 0 – 5)", color: "#00ffaa", min_tier_lvl: 0, ids: ["street_hoodie", "tracksuit", "biker_jacket"] }, { key: "5-8", title: "Tier 2: Fixer & Syndicate Collection (Levels 5 – 8)", color: "#00aaff", min_tier_lvl: 5, ids: ["tactical_vest", "club_blazer", "fixer_trench"] }, { key: "8-15", title: "Tier 3: Crime Lord & Kingpin Haute Couture (Levels 8 – 15)", color: "#ffd700", min_tier_lvl: 8, ids: ["italian_suit", "enforcer_armor", "kingpin_suit"] } ]>> <<for _t to 0; _t < _tiers.length; _t++>> <<set _tier to _tiers[_t]>> <div @style="'border-left: 4px solid ' + _tier.color + '; background-color: #141414; padding: 14px; margin-bottom: 20px; border-radius: 4px;'"> <h4 @style="'margin: 0 0 10px 0; color: ' + _tier.color + ';'"><<print _tier.title>></h4> <<if $rep_level < _tier.min_tier_lvl>> <span style="color: #777;"><em>🔒 The tailor blocks your path with a polite smile. "This collection is reserved for clients of Reputation Level <<print _tier.min_tier_lvl>> or higher."</em></span> <<else>> <<for _k to 0; _k < _tier.ids.length; _k++>> <<set _outId to _tier.ids[_k]>> <<set _out to $outfit_db[_outId]>> <<capture _outId, _out>> <div style="display: flex; gap: 15px; align-items: center; background-color: #1e1e1e; border: 1px solid #333; padding: 12px; margin-bottom: 10px; border-radius: 5px;"> <div style="width: 95px; text-align: center; flex-shrink: 0;"> <img @src="'images/outfits/' + _outId + '.jpg'" onerror="if(this.src.indexOf('.jpg')!==-1){this.src=this.src.replace('.jpg','.png');}else{this.style.display='none';}" @style="'max-width: 90px; max-height: 90px; border: 1px solid ' + _tier.color + '; border-radius: 4px;'"> </div> <div style="flex: 1;"> <strong style="font-size: 1.05em; color: #eee;"><<print _out.name>></strong> <span style="font-size: 0.8em; color: #aaa; background-color: #2a2a2a; padding: 2px 6px; border-radius: 3px;">Req: Lv.<<print _out.min_level>></span> <br> <span style="font-size: 0.85em; color: #aaa;"><em><<print _out.desc>></em></span><br> <span style="font-size: 0.9em; color: #00ffaa;"><strong>Bonuses:</strong> <<print _out.bonus_text>></span> </div> <div style="min-width: 155px; text-align: right;"> <<if $inventory.outfits.includes(_outId)>> <<if $active_outfit is _outId>> <span style="color: #00ffaa; font-weight: bold;">[ WEARING ]</span> <<else>> <<link "[ Wear Outfit ]">> <<equipOutfit _outId>> <<goto "Mall_Clothing">> <</link>> <</if>> <<elseif $rep_level < _out.min_level>> <span style="color: #ff4444; font-size: 0.85em;">🔒 Requires Lv.<<print _out.min_level>></span><br> <span style="color: #777; font-size: 0.85em;">($<<print _out.price>>)</span> <<elseif $money >= _out.price>> <<link `'Buy & Wear ($' + _out.price + ')'`>> <<set $money -= _out.price>> <<run $inventory.outfits.push(_outId)>> <<equipOutfit _outId>> <<goto "Mall_Clothing">> <</link>> <<else>> <span style="color: #888; font-size: 0.85em;">$<<print _out.price>><br><em>(Not enough cash)</em></span> <</if>> </div> </div> <</capture>> <</for>> <</if>> </div> <</for>> <hr style="border: 0; border-top: 1px solid #444; margin: 15px 0;"> <<link "Back to Mall Directory">><<goto "Financial_Mall">><</link>> <</nobr>>
<<nobr>> <<if $daily_earned is undefined>><<set $daily_earned to 0>><</if>> <<if $daily_spent is undefined>><<set $daily_spent to 0>><</if>> <<if $last_tracked_money is undefined>><<set $last_tracked_money to $money>><</if>> <<if passage() isnot "Wake_Up">> <<if $money > $last_tracked_money>> <<set $daily_earned += ($money - $last_tracked_money)>> <<elseif $money < $last_tracked_money>> <<set $daily_spent += ($last_tracked_money - $money)>> <</if>> <<set $last_tracked_money to $money>> <</if>> <<if !["Travel_Handler", "Sex_Turn", "Combat_Turn", "Gunfight_Turn"].includes(passage()) and $counters isnot undefined>> <<if $last_counters is undefined>> <<set $last_counters to clone($counters)>> <</if>> <<set _perkMeta to { travels: { tiers: [{ name: "Sprinter", min: 0, max: 50 }], flavors: [ "You weave through the city's back alleys with growing familiarity.", "Your stride is getting faster and your breathing stays steady across town.", "Every shortcut and side street in the city is etching itself into your memory." ] }, basketball_training: { tiers: [{ name: "Athletic", min: 0, max: 20 }], flavors: [ "Running the court leaves your lungs burning, expanding your cardio.", "Your footwork and explosiveness on the asphalt are sharpening.", "Sweat pours down as your endurance pushes past its old limits." ] }, drugs_bought: { tiers: [{ name: "Bulk Buyer", min: 0, max: 100 }], flavors: [ "Local dealers are starting to recognize your face and your cash.", "Word is spreading on the corners that you're a serious buyer.", "Suppliers nod with respect as you move more product through the streets." ] }, drugs_sold: { tiers: [ { name: "Corner Pusher (Dealing Lv.1)", min: 0, max: 20 }, { name: "Trap Lord (Dealing Lv.2)", min: 20, max: 60 }, { name: "Cartel Kingpin (Dealing Lv.3)", min: 60, max: 150 } ], flavors: [ "Counting crumpled street bills; you're building a network of regular fiends.", "Your street reputation is spreading across the district; product moves fast.", "From street corners to bulk shipments, you rule the city's narcotics trade." ] }, successful_dhustles: { tiers: [{ name: "Smooth Criminal", min: 0, max: 10 }], flavors: [ "Your silver tongue and calculated charm are getting harder to resist.", "Reading people's desires and manipulating their trust feels effortless.", "Another mark wrapped around your finger with a convincing smile." ] }, gym_workouts: { tiers: [ { name: "Jacked (Gym Lv.1)", min: 0, max: 20 }, { name: "Ripped (Gym Lv.2)", min: 20, max: 40 }, { name: "Bodybuilder (Gym Lv.3)", min: 40, max: 60 }, { name: "Olympian (Gym Lv.4)", min: 60, max: 85 }, { name: "Apex Titan (Gym Lv.5)", min: 85, max: 115 } ], flavors: [ "Iron clangs as your muscle fibers tear and rebuild stronger.", "A heavy pump courses through your veins; your frame is visibly broadening.", "You push through the burn, carving raw power into your physique." ] }, total_kidnappings: { tiers: [ { name: "Prowler (Kidnap Lv.1)", min: 0, max: 10 }, { name: "Shadow (Kidnap Lv.2)", min: 10, max: 50 }, { name: "Boogeyman (Kidnap Lv.3)", min: 50, max: 100 } ], flavors: [ "You spot blind spots and isolated targets with predatory instinct.", "Snatching a target from the shadows is becoming cold, clinical routine.", "You move like a phantom—silent, fast, and ruthless." ] }, combats_lost: { tiers: [{ name: "Tough Skin", min: 0, max: 5 }], flavors: [ "Your bruised ribs and split lip only numb you to future pain.", "Every beating hardens your body and teaches you how to absorb a hit." ] }, combats_won: { tiers: [ { name: "Novice (Combat Lv.1)", min: 0, max: 5 }, { name: "Brawler (Combat Lv.2)", min: 5, max: 15 }, { name: "Fighter (Combat Lv.3)", min: 15, max: 30 }, { name: "Killer (Combat Lv.4)", min: 30, max: 60 }, { name: "Psycho (Combat Lv.5)", min: 60, max: 100 }, { name: "Death (Combat Lv.6)", min: 100, max: 150 }, { name: "Reaper (Combat Lv.7)", min: 150, max: 250 } ], flavors: [ "Your knuckles sting, but your combat reflexes are getting sharper.", "The chaos of violence slows down; you read your enemy's telegraphing.", "Another body hits the pavement. Your strikes are growing more lethal." ] }, total_searches: { tiers: [{ name: "Scavenger", min: 0, max: 15 }], flavors: [ "You methodically sweep every drawer and hidden compartment for valuables.", "Your eye for stashed cash and contraband is getting sharper." ] }, hotel_shifts: { tiers: [{ name: "Blue Collar", min: 0, max: 5 }], flavors: [ "Grueling manual labor toughens your calluses and builds base stamina.", "Hauling heavy loads and scrubbing floors hardens your work ethic." ] }, total_alcohol_drank: { tiers: [{ name: "Iron Liver", min: 0, max: 20 }], flavors: [ "The liquor burns going down, building up your tolerance to the buzz.", "Your body is adapting to the alcohol coursing through your system." ] }, swims: { tiers: [{ name: "Swimmer", min: 0, max: 15 }], flavors: [ "Fighting the cold ocean currents forces your lungs to expand.", "Your strokes cut cleanly through the waves, building deep stamina." ] }, escort_clients: { tiers: [{ name: "Heartthrob", min: 0, max: 10 }], flavors: [ "You learn exactly how to read a client's desires and leave her breathless.", "Your reputation as an irresistible lover is growing with every booking." ] }, outside: { tiers: [{ name: "Exhibitionnist", min: 0, max: 15 }], flavors: [ "The thrill of getting caught in public makes you bolder and more persuasive.", "Taking what you want out in the open sharpens your nerve and magnetism." ] }, rough: { tiers: [{ name: "Rough", min: 0, max: 50 }], flavors: [ "Pushing physical limits in bed builds relentless raw stamina.", "Your dominant pace and endurance are becoming second nature." ] }, shadowboard_quests: { tiers: [ { name: "Freelancer (Contractor Lv.1)", min: 0, max: 5 }, { name: "Fixer's Favorite (Contractor Lv.2)", min: 5, max: 15 }, { name: "Shadow Broker (Contractor Lv.3)", min: 15, max: 30 } ], flavors: [ "Another encrypted contract closed cleanly; your darknet rating climbs.", "Anonymous handlers take note of your ruthless efficiency on the board.", "Your reputation across the ShadowBoard nodes is growing stronger." ] }, apex_contracts: { tiers: [ { name: "Corporate Cleaner (Apex Lv.1)", min: 0, max: 3 }, { name: "Spin Doctor (Apex Lv.2)", min: 3, max: 8 }, { name: "Untouchable (Apex Lv.3)", min: 8, max: 15 } ], flavors: [ "Apex Management's senior partners are impressed by your clean handling of the dossier.", "Another corporate liability buried; your pull with the city's legal fixers deepens.", "White-collar power brokers now view you as an indispensable problem solver." ] } }>> <<set _activeToasts to []>> <<set _cKeys to Object.keys(_perkMeta)>> <<for _idx to 0; _idx < _cKeys.length; _idx++>> <<set _k to _cKeys[_idx]>> <<set _curVal to ($counters[_k] || 0)>> <<set _oldVal to ($last_counters[_k] || 0)>> <<if _curVal > _oldVal>> <<set _meta to _perkMeta[_k]>> <<set _targetTier to null>> <<for _tIdx to 0; _tIdx < _meta.tiers.length; _tIdx++>> <<if _oldVal < _meta.tiers[_tIdx].max>> <<set _targetTier to _meta.tiers[_tIdx]>> <<break>> <</if>> <</for>> <<if _targetTier isnot null>> <<set _clamped to Math.min(_curVal, _targetTier.max)>> <<set _pct to Math.floor(((_clamped - _targetTier.min) / (_targetTier.max - _targetTier.min)) * 100)>> <<set _pct to Math.clamp(_pct, 1, 100)>> <<run _activeToasts.push({ name: _targetTier.name, pct: _pct, flavor: _meta.flavors.random(), ready: (_clamped >= _targetTier.max) })>> <</if>> <<set $last_counters[_k] to _curVal>> <</if>> <</for>> <<if _activeToasts.length > 0>> <style> @keyframes perkToastSlide { 0% { opacity: 0; transform: translateX(40px); } 8% { opacity: 1; transform: translateX(0); } 82% { opacity: 1; transform: translateX(0); } 100% { opacity: 0; transform: translateY(-10px); pointer-events: none; } } .perk-toast-box { animation: perkToastSlide 6s ease forwards; } </style> <div style="position: fixed; top: 18px; right: 18px; z-index: 9999; width: 310px; max-width: 88vw; display: flex; flex-direction: column; gap: 8px; pointer-events: none;"> <<for _m to 0; _m < _activeToasts.length; _m++>> <<set _toast to _activeToasts[_m]>> <<set _barColor to (_toast.ready ? "#ffd700" : "#00ffaa")>> <div class="perk-toast-box" onclick="this.style.display='none'" @style="'pointer-events: auto; cursor: pointer; background-color: rgba(18, 18, 24, 0.96); border: 1px solid #444; border-left: 4px solid ' + _barColor + '; border-radius: 6px; padding: 10px 13px; box-shadow: 0 6px 18px rgba(0,0,0,0.8);'"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 4px;"> <span @style="'font-size: 0.85em; font-weight: bold; color: ' + _barColor + '; text-transform: uppercase; letter-spacing: 0.5px;'">⚡ <<print _toast.name>></span> <span style="font-size: 0.8em; font-weight: bold; color: #eee; background-color: #262630; padding: 1px 6px; border-radius: 4px;"><<print _toast.pct>>%</span> </div> <div style="font-size: 0.8em; color: #ccc; font-style: italic; line-height: 1.3; margin-bottom: 7px;"> "<<print _toast.flavor>>" <<if _toast.ready is true>> <br><span style="color: #ffd700; font-style: normal; font-weight: bold;">✔ Ready to unlock when you sleep!</span> <</if>> </div> <div style="background-color: #111; border: 1px solid #333; border-radius: 3px; height: 5px; width: 100%; overflow: hidden;"> <div @style="'background-color: ' + _barColor + '; height: 100%; width: ' + _toast.pct + '%;'"></div> </div> </div> <</for>> </div> <</if>> <</if>> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/port.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Port — Warehouse 12 (Contraband Storage Depot)</h3> <<nobr>> <<if $contraband_warehouse_owned is undefined>><<set $contraband_warehouse_owned to false>><</if>> <<if $contraband_warehouse_level is undefined>><<set $contraband_warehouse_level to 1>><</if>> <<if $contraband_warehouse_capacity is undefined>><<set $contraband_warehouse_capacity to 6>><</if>> <<set _totalCrates to 0>> <<for _i to 0; _i < $contraband_types.length; _i++>> <<set _cType to $contraband_types[_i]>> <<set _totalCrates += ($container_stash[_cType] || 0)>> <</for>> <strong>Your Wallet:</strong> <span style="color: #00ffaa;">$<<print $money>></span><br><br> <<if $contraband_warehouse_owned is false>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #ffaa00; margin-bottom: 20px;"> <h4>🏭 Acquire Warehouse 12 Lease</h4> A heavily padlocked corrugated-steel depot tucked away at the edge of the shipping yard. You cannot haul or store heavy contraband crates in your apartment—you need a dedicated harbor warehouse to stash stolen shipping crates before moving them to the Cartel in Warehouse 7.<br><br> <strong>Purchase Price:</strong> $8,000<br> <strong>Base Storage Capacity:</strong> 6 Contraband Crates<br> <strong>Weekly Harbor Lease & Bribe Tax:</strong> $650 / week<br><br> <<if $money >= 8000>> <<link "[ Buy Warehouse 12 Lease ($8,000) ]">> <<set $money -= 8000>> <<set $contraband_warehouse_owned to true>> <<set $contraband_warehouse_level to 1>> <<set $contraband_warehouse_capacity to 6>> <<goto "Port_Contraband_Warehouse">> <</link>> <<else>> <span style="color: #ff4444;"><em>You need $8,000 to acquire the lease for Warehouse 12.</em></span> <</if>> </div> <<else>> <<set _weeklyTax to 500 + ($contraband_warehouse_level * 150)>> <div style="background-color: #161616; padding: 14px; border: 1px solid #444; border-left: 4px solid #00ffaa; margin-bottom: 18px;"> <strong>Status:</strong> <span style="color: #00ffaa;">Operational (Lv.<<print $contraband_warehouse_level>>)</span> | <strong>Crate Capacity:</strong> <span style="color: #ffaa00;"><<print _totalCrates>> / <<print $contraband_warehouse_capacity>> Crates</span> | <strong>Weekly Upkeep:</strong> <span style="color: #ff4444;">-$<<print _weeklyTax>> / week</span> </div> <h4>📦 Stored Contraband Inventory</h4> <span style="font-size: 0.85em; color: #aaa;"><em>Hold onto crates to fulfill high-paying weekly Cartel manifests at Warehouse 7 ($4,000/crate), dispatch bulk freight via the Meridian Exchange, or fence unwanted crates locally for $450 to free up storage space.</em></span><br> <<if $contraband_broker_unlocked is true>> <div style="margin-top: 8px; margin-bottom: 6px;"> <<link "[ 🚂 Open Meridian Bulk Freight Exchange (Weekly Manifests & Bulk Sales) ]">> <<set $exchange_return to "Port_Contraband_Warehouse">> <<goto "Computer_ContrabandExchange">> <</link>> </div> <</if>> <br> <div style="background-color: #141414; padding: 12px; border: 1px solid #333; margin-bottom: 20px;"> <<for _i to 0; _i < $contraband_types.length; _i++>> <<set _cType to $contraband_types[_i]>> <<set _qty to ($container_stash[_cType] || 0)>> <<capture _cType, _qty>> <div style="display: flex; justify-content: space-between; align-items: center; padding: 8px; border-bottom: 1px solid #282828;"> <div> <strong><<print _cType>>:</strong> <<if _qty > 0>> <span style="color: #00ffaa; font-weight: bold;"> <<print _qty>> crate(s)</span> <<else>> <span style="color: #666;"> 0 crates</span> <</if>> </div> <div> <<if _qty > 0>> <<link "[ Fence 1x Crate Locally (+$450) ]">> <<set $container_stash[_cType] -= 1>> <<set $money += 450>> <<goto "Port_Contraband_Warehouse">> <</link>> <</if>> </div> </div> <</capture>> <</for>> </div> <div style="background-color: #1a1a1a; padding: 14px; border-left: 4px solid #00aaff; margin-bottom: 20px;"> <h4>🏗️ Expand Depot Storage</h4> Install heavy industrial shelving and bribe additional customs clerks to expand your storage capacity.<br> <<set _upCost to $contraband_warehouse_level * 5000>> <strong>Upgrade Cost:</strong> $<<print _upCost>> (+4 Crate Capacity, +$150/week upkeep)<br><br> <<if $money >= _upCost>> <<link `"[ Expand Warehouse Capacity (+4 Crates — $" + _upCost + ") ]"`>> <<set $money -= _upCost>> <<set $contraband_warehouse_level += 1>> <<set $contraband_warehouse_capacity += 4>> <<goto "Port_Contraband_Warehouse">> <</link>> <<else>> <span style="color: #888;"><em>Requires $<<print _upCost>> to upgrade capacity.</em></span> <</if>> </div> <</if>> <hr style="border-color: #444;"> <<link "Return to the Port">><<goto "Port">><</link>> <</nobr>>
<h3>🏛️ Apex Executive Suite — The Prosecutor's Aide</h3> <<nobr>> <<if $apex_office_step is undefined>><<set $apex_office_step to "bj">><</if>> <<if $apex_office_step is "bj">> <<randomImage "images/Sex/office/bj/" 12 0 "#ff55aa">> <<elseif $apex_office_step is "sex">> <<randomImage "images/Sex/office/sex/" 23 0 "#ff55aa">> <<else>> <<randomImage "images/Sex/office/cum/" 7 0 "#ff55aa">> <</if>> <<if $apex_office_log isnot undefined and $apex_office_log isnot "">> <div style="background-color: #1a1520; padding: 12px; border-left: 3px solid #ff55aa; margin-bottom: 15px;"> $apex_office_log </div> <</if>> <<if $apex_office_step isnot "cum">> <strong>Executive Suite Actions:</strong><br><br> <<link "[ Push her to her knees under the executive desk (Oral) ]">> <<set $apex_office_step to "bj">> <<set $apex_office_log to "You lean back in the leather executive chair overlooking the Neon Strip while the District Attorney's aide hikes up her pencil skirt, dropping to her knees between your legs to worship your cock.">> <<goto "Apex_Charm_Sex">> <</link>><br><br> <<link "[ Bend her over the mahogany boardroom table (Fuck her) ]">> <<set $apex_office_step to "sex">> <<set $apex_office_log to "Papers and subpoena files scatter across the polished mahogany desk as you hike up her skirt and drive deep inside her. Her moans echo off the floor-to-ceiling glass.">> <<goto "Apex_Charm_Sex">> <</link>><br><br> <hr style="border-color: #444;"> <<link "[ Climax & Seal the Deal ]">> <<set $apex_office_step to "cum">> <<set $apex_office_log to "You finish hard over the disheveled prosecutor's aide. Flush and breathless, she straightens her blouse, stamps the executive clearance order, and feeds your entire police dossier into the cross-cut shredder.">> <<goto "Apex_Charm_Sex">> <</link>> <<else>> <div style="background-color: #14241a; padding: 12px; border: 1px solid #00ffaa; border-radius: 4px; margin-bottom: 15px;"> <span style="color: #00ffaa;"><strong>✔ Dossier Shredded:</strong> The District Attorney's aide has officially buried your active investigation files (<strong>-<<print $last_apex_heat_scrubbed>>% Heat</strong>, <strong>+30 XP</strong>).</span> </div> <<link "Adjust your tie and return to Apex Management">> <<unset $apex_office_step>> <<unset $apex_office_log>> <<goto "Neon_Laundering">> <</link>> <</if>> <</nobr>>
<h3>🃏 Neon Casino — High-Stakes Blackjack</h3> <<nobr>> <style> @keyframes cardSlideIn { 0% { opacity: 0; transform: translateY(-25px) rotate(-4deg) scale(0.85); } 100% { opacity: 1; transform: translateY(0) rotate(0deg) scale(1); } } .bj-table { background: radial-gradient(circle at center, #11422c 0%, #071f14 85%, #04120b 100%); border: 4px solid #c59b27; border-radius: 16px; padding: 22px; max-width: 620px; margin: 15px auto 20px auto; box-shadow: 0 10px 30px rgba(0,0,0,0.85), inset 0 0 40px rgba(0,0,0,0.6); text-align: center; position: relative; } .bj-hand-zone { min-height: 135px; padding: 10px; margin: 8px 0; border-radius: 10px; background: rgba(0, 0, 0, 0.25); border: 1px dashed rgba(255, 215, 0, 0.25); } .bj-cards-row { display: flex; justify-content: center; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 8px; } .bj-card-img { width: 82px; height: auto; border-radius: 6px; box-shadow: 0 4px 10px rgba(0,0,0,0.75); border: 1px solid #fff; animation: cardSlideIn 0.3s ease-out forwards; } .bj-score-badge { display: inline-block; background: #111; color: #ffd700; border: 1px solid #c59b27; padding: 2px 10px; border-radius: 12px; font-size: 0.85em; font-weight: bold; margin-left: 8px; } </style> /* --- SYSTÈME ANTI-TRICHE (ANTI BACK-BUTTON / SAVE-SCUMMING) --- */ <<set _antiCheatTriggered to false>> <<run try { var lockRaw = sessionStorage.getItem("pc_bj_vault"); if (lockRaw) { var lock = JSON.parse(lockRaw); if (lock && typeof lock.enforcedMoney === "number") { if (State.variables.money > lock.enforcedMoney && State.variables.bj_session_id !== lock.sessionId) { State.variables.money = lock.enforcedMoney; State.variables.bj_state = "betting"; State.variables.bj_bet = 0; State.temporary.antiCheatTriggered = true; } } } } catch (e) {} >> <<if $bj_state is undefined>> <<set $bj_state to "betting">> <<set $bj_bet to 0>> <<set $bj_player_hand to []>> <<set $bj_dealer_hand to []>> <<set $bj_deck to []>> <<set $bj_message to "">> <</if>> <<if _antiCheatTriggered is true>> <div style="background-color: #330a0a; border: 2px solid #ff4444; padding: 12px; border-radius: 6px; margin-bottom: 15px;"> <strong style="color: #ff4444;">👁️ Pit Boss Security Alert:</strong> The Triad pit boss places a heavy hand on your shoulder and points up at the eye-in-the-sky dome camera. <em>"Don't even think about rewinding the table, friend. The house ledger never forgets a bet."</em> </div> <</if>> <div style="display: flex; justify-content: space-between; align-items: center; background-color: #15151e; border: 1px solid #333; padding: 10px 15px; border-radius: 6px; margin-bottom: 15px;"> <div><strong>Your Wallet:</strong> <span style="color: #00ffaa; font-size: 1.1em;">$<<print $money>></span></div> <div> <<if $bj_state is "player_turn">> <strong>Current Bet on Table:</strong> <span style="color: #ffd700;">$<<print $bj_bet>></span> <<else>> <span style="font-size: 0.85em; color: #aaa;">Blackjack Pays <strong>3:2</strong> | Dealer Stands on <strong>17</strong></span> <</if>> </div> </div> /* --- FONCTION DE CALCUL DES POINTS D'UNE MAIN --- */ <<run setup.calcBjHand = function(hand) { if (!hand || !hand.length) return { total: 0, soft: false }; var total = 0; var aces = 0; for (var i = 0; i < hand.length; i++) { var r = hand[i].rank; if (r === "A") { total += 11; aces += 1; } else if (r === "K" || r === "Q" || r === "J" || r === "10") { total += 10; } else { total += parseInt(r, 10); } } while (total > 21 && aces > 0) { total -= 10; aces -= 1; } return { total: total, soft: (aces > 0) }; }; setup.buildBjDeck = function() { var ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]; var suits = ["C", "D", "H", "S"]; var deck = []; for (var r = 0; r < ranks.length; r++) { for (var s = 0; s < suits.length; s++) { deck.push({ rank: ranks[r], suit: suits[s], code: ranks[r] + suits[s] }); } } return deck.shuffle(); }; >> <<set _pScoreObj to setup.calcBjHand($bj_player_hand)>> <<set _dScoreObj to setup.calcBjHand($bj_dealer_hand)>> <div class="bj-table"> <div style="font-family: 'Georgia', serif; letter-spacing: 2px; color: #ffd700; font-size: 0.95em; text-transform: uppercase; margin-bottom: 6px;"> ♠️ Neon Triad VIP Blackjack ♥️ </div> <!-- ZONE DU CROUPIER --> <div class="bj-hand-zone"> <div style="font-size: 0.9em; color: #ddd; font-weight: bold;"> Dealer's Hand <<if $bj_dealer_hand.length > 0>> <span class="bj-score-badge"> <<print _dScoreObj.total>><<if $bj_state is "player_turn">> + ?<</if>> </span> <</if>> </div> <div class="bj-cards-row"> <<if $bj_dealer_hand.length is 0>> <img src="images/cards/back.jpg" class="bj-card-img" style="opacity: 0.35;"> <img src="images/cards/back.jpg" class="bj-card-img" style="opacity: 0.35;"> <<else>> <<for _d to 0; _d < $bj_dealer_hand.length; _d++>> <<set _dCard to $bj_dealer_hand[_d]>> <img @src="'images/cards/' + _dCard.code + '.jpg'" class="bj-card-img"> <</for>> /* La 2e carte du croupier n'est tirée du paquet que lorsque le joueur a fini son tour : impossible de tricher avec F12 ! */ <<if $bj_state is "player_turn">> <img src="images/cards/back.jpg" class="bj-card-img"> <</if>> <</if>> </div> </div> <!-- BANNIÈRE DE RÉSULTAT --> <div style="min-height: 44px; display: flex; align-items: center; justify-content: center; margin: 10px 0;"> <<if $bj_message isnot "">> <div style="background: rgba(0,0,0,0.75); border: 1px solid #c59b27; border-radius: 8px; padding: 8px 16px; width: 100%;"> $bj_message </div> <<else>> <span style="color: #99bb99; font-style: italic; font-size: 0.9em;">Place your chips on the felt to deal a new hand.</span> <</if>> </div> <!-- ZONE DU JOUEUR --> <div class="bj-hand-zone"> <div style="font-size: 0.9em; color: #ddd; font-weight: bold;"> Your Hand <<if $bj_player_hand.length > 0>> <span class="bj-score-badge"> <<if _pScoreObj.soft and _pScoreObj.total < 21>>Soft <</if>><<print _pScoreObj.total>> </span> <</if>> </div> <div class="bj-cards-row"> <<if $bj_player_hand.length is 0>> <img src="images/cards/back.jpg" class="bj-card-img" style="opacity: 0.35;"> <img src="images/cards/back.jpg" class="bj-card-img" style="opacity: 0.35;"> <<else>> <<for _p to 0; _p < $bj_player_hand.length; _p++>> <<set _pCard to $bj_player_hand[_p]>> <img @src="'images/cards/' + _pCard.code + '.jpg'" class="bj-card-img"> <</for>> <</if>> </div> </div> </div> /* ======================================================= */ /* ACTIONS DU JOUEUR EN COURS */ /* ======================================================= */ <<if $bj_state is "player_turn">> <div style="text-align: center; margin-bottom: 15px;"> <strong>Your Move:</strong><br><br> <span style="display: inline-block; margin: 4px;"> <<button "🃏 Hit (Draw Card)">> <<run $bj_player_hand.push($bj_deck.pop())>> <<set _newP to setup.calcBjHand($bj_player_hand)>> <<if _newP.total > 21>> /* BUST */ <<run $bj_dealer_hand.push($bj_deck.pop())>> <<set $bj_state to "betting">> <<set $bj_message to "<span style='color: #ff4444; font-weight: bold;'>💥 BUST (" + _newP.total + ")!</span> You went over 21 and lost <strong>-$" + $bj_bet + "</strong>.">> <<set $bj_bet to 0>> <<elseif _newP.total is 21>> /* AUTO-STAND SUR 21 */ <<run while (setup.calcBjHand(State.variables.bj_dealer_hand).total < 17) { State.variables.bj_dealer_hand.push(State.variables.bj_deck.pop()); } >> <<set _finalD to setup.calcBjHand($bj_dealer_hand).total>> <<set $bj_state to "betting">> <<if _finalD > 21>> <<set _win to $bj_bet * 2>> <<set $money += _win>> <<set $bj_message to "<span style='color: #00ffaa; font-weight: bold;'>🏆 DEALER BUSTS (" + _finalD + ")!</span> You hit 21 and won <strong>+$" + $bj_bet + "</strong>!">> <<elseif _finalD < 21>> <<set _win to $bj_bet * 2>> <<set $money += _win>> <<set $bj_message to "<span style='color: #00ffaa; font-weight: bold;'>🏆 21 WINS!</span> You beat the dealer's " + _finalD + " and won <strong>+$" + $bj_bet + "</strong>!">> <<else>> <<set $money += $bj_bet>> <<set $bj_message to "<span style='color: #ffaa00; font-weight: bold;'>🤝 PUSH (21 vs 21)!</span> Your <strong>$" + $bj_bet + "</strong> bet is returned.">> <</if>> <<set $bj_bet to 0>> <<else>> <<set $bj_message to "You drew a card. Total: <strong>" + _newP.total + "</strong>. Hit or Stand?">> <</if>> <<set $bj_session_id to random(100000, 999999)>> <<run try { sessionStorage.setItem("pc_bj_vault", JSON.stringify({ enforcedMoney: State.variables.money, sessionId: State.variables.bj_session_id })); } catch (e) {} >> <<goto "Casino_Blackjack">> <</button>> </span> <span style="display: inline-block; margin: 4px;"> <<button "🛑 Stand (Hold Hand)">> <<run while (setup.calcBjHand(State.variables.bj_dealer_hand).total < 17) { State.variables.bj_dealer_hand.push(State.variables.bj_deck.pop()); } >> <<set _finalP to setup.calcBjHand($bj_player_hand).total>> <<set _finalD to setup.calcBjHand($bj_dealer_hand).total>> <<set $bj_state to "betting">> <<if _finalD > 21>> <<set _win to $bj_bet * 2>> <<set $money += _win>> <<set $bj_message to "<span style='color: #00ffaa; font-weight: bold;'>🏆 DEALER BUSTS (" + _finalD + ")!</span> Your " + _finalP + " wins <strong>+$" + $bj_bet + "</strong>!">> <<elseif _finalP > _finalD>> <<set _win to $bj_bet * 2>> <<set $money += _win>> <<set $bj_message to "<span style='color: #00ffaa; font-weight: bold;'>🏆 YOU WIN (" + _finalP + " vs " + _finalD + ")!</span> You won <strong>+$" + $bj_bet + "</strong>!">> <<elseif _finalP < _finalD>> <<set $bj_message to "<span style='color: #ff4444; font-weight: bold;'>❌ DEALER WINS (" + _finalD + " vs " + _finalP + ").</span> You lost <strong>-$" + $bj_bet + "</strong>.">> <<else>> <<set $money += $bj_bet>> <<set $bj_message to "<span style='color: #ffaa00; font-weight: bold;'>🤝 PUSH (" + _finalP + " vs " + _finalD + ")!</span> Your <strong>$" + $bj_bet + "</strong> bet is returned.">> <</if>> <<set $bj_bet to 0>> <<set $bj_session_id to random(100000, 999999)>> <<run try { sessionStorage.setItem("pc_bj_vault", JSON.stringify({ enforcedMoney: State.variables.money, sessionId: State.variables.bj_session_id })); } catch (e) {} >> <<goto "Casino_Blackjack">> <</button>> </span> <<if $bj_player_hand.length is 2 and $money >= $bj_bet>> <span style="display: inline-block; margin: 4px;"> <<button `"💰 Double Down (+$" + $bj_bet + ")"`>> <<set $money -= $bj_bet>> <<set $bj_bet to $bj_bet * 2>> <<run $bj_player_hand.push($bj_deck.pop())>> <<set _finalP to setup.calcBjHand($bj_player_hand).total>> <<set $bj_state to "betting">> <<if _finalP > 21>> <<run $bj_dealer_hand.push($bj_deck.pop())>> <<set $bj_message to "<span style='color: #ff4444; font-weight: bold;'>💥 DOUBLE DOWN BUST (" + _finalP + ")!</span> You lost <strong>-$" + $bj_bet + "</strong>.">> <<else>> <<run while (setup.calcBjHand(State.variables.bj_dealer_hand).total < 17) { State.variables.bj_dealer_hand.push(State.variables.bj_deck.pop()); } >> <<set _finalD to setup.calcBjHand($bj_dealer_hand).total>> <<if _finalD > 21>> <<set $money += ($bj_bet * 2)>> <<set $bj_message to "<span style='color: #00ffaa; font-weight: bold;'>🏆 DOUBLE DOWN WIN!</span> Dealer busted (" + _finalD + ")! You won <strong>+$" + $bj_bet + "</strong>!">> <<elseif _finalP > _finalD>> <<set $money += ($bj_bet * 2)>> <<set $bj_message to "<span style='color: #00ffaa; font-weight: bold;'>🏆 DOUBLE DOWN WIN (" + _finalP + " vs " + _finalD + ")!</span> You won <strong>+$" + $bj_bet + "</strong>!">> <<elseif _finalP < _finalD>> <<set $bj_message to "<span style='color: #ff4444; font-weight: bold;'>❌ DEALER WINS (" + _finalD + " vs " + _finalP + ").</span> Double Down lost <strong>-$" + $bj_bet + "</strong>.">> <<else>> <<set $money += $bj_bet>> <<set $bj_message to "<span style='color: #ffaa00; font-weight: bold;'>🤝 PUSH (" + _finalP + " vs " + _finalD + ")!</span> Your doubled bet (<strong>$" + $bj_bet + "</strong>) is returned.">> <</if>> <</if>> <<set $bj_bet to 0>> <<set $bj_session_id to random(100000, 999999)>> <<run try { sessionStorage.setItem("pc_bj_vault", JSON.stringify({ enforcedMoney: State.variables.money, sessionId: State.variables.bj_session_id })); } catch (e) {} >> <<goto "Casino_Blackjack">> <</button>> </span> <</if>> </div> /* ======================================================= */ /* CHOIX DE LA MISE (DEAL) */ /* ======================================================= */ <<else>> <div style="text-align: center;"> <strong>Deal a New Hand (Takes 5 minutes):</strong><br><br> <<set _chipBets to [10, 50, 100, 250, 500, 1000, 5000]>> <<set _hasMoneyForBet to false>> <<for _i to 0; _i < _chipBets.length; _i++>> <<set _amt to _chipBets[_i]>> <<if $money >= _amt>> <<set _hasMoneyForBet to true>> <<capture _amt>> <span style="display: inline-block; margin: 4px;"> <<button `"🪙 Bet $" + _amt`>> <<set $money -= _amt>> <<set $bj_bet to _amt>> <<set _oldTime to $time>> <<set $time += 5>> <<set $bj_deck to setup.buildBjDeck()>> <<set $bj_player_hand to [$bj_deck.pop(), $bj_deck.pop()]>> /* Le croupier ne tire qu'une seule carte visible au départ : la 2e reste dans le paquet jusqu'à la révélation ! */ <<set $bj_dealer_hand to [$bj_deck.pop()]>> <<set _initP to setup.calcBjHand($bj_player_hand).total>> <<if _initP is 21>> /* NATURAL BLACKJACK ! On tire la 2e carte du croupier pour vérifier l'égalité */ <<run $bj_dealer_hand.push($bj_deck.pop())>> <<set _initD to setup.calcBjHand($bj_dealer_hand).total>> <<set $bj_state to "betting">> <<if _initD is 21>> <<set $money += $bj_bet>> <<set $bj_message to "<span style='color: #ffaa00; font-weight: bold;'>🤝 DOUBLE BLACKJACK PUSH!</span> Both you and the dealer hit Natural 21. Bet returned.">> <<else>> <<set _bjBonus to Math.floor($bj_bet * 1.5)>> <<set $money += ($bj_bet + _bjBonus)>> <<set $bj_message to "<span style='color: #ffd700; font-size: 1.1em; font-weight: bold;'>🃏 NATURAL BLACKJACK (3:2)!</span> You won <strong>+$" + _bjBonus + "</strong>!">> <</if>> <<set $bj_bet to 0>> <<else>> <<set $bj_state to "player_turn">> <<set $bj_message to "Cards dealt! Your total is <strong>" + _initP + "</strong> against the dealer's <strong>" + $bj_dealer_hand[0].rank + "</strong>.">> <</if>> <<set $bj_session_id to random(100000, 999999)>> <<run try { sessionStorage.setItem("pc_bj_vault", JSON.stringify({ enforcedMoney: State.variables.money, sessionId: State.variables.bj_session_id })); } catch (e) {} >> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<set $bj_state to "betting">> <<set $bj_bet to 0>> <<goto "Pass_Out">> <<else>> <<goto "Casino_Blackjack">> <</if>> <</button>> </span> <</capture>> <</if>> <</for>> <<if _hasMoneyForBet is false>> <span style="color: #ff4444;"><em>You need at least $10 to sit at the Blackjack table.</em></span> <</if>> </div> <br><hr style="border-color: #444;"> <<link "Cash out and return to Casino Floor">> <<set $bj_message to "">> <<set $bj_player_hand to []>> <<set $bj_dealer_hand to []>> <<run try { sessionStorage.removeItem("pc_bj_vault"); } catch(e) {} >> <<goto "Neon_Casino">> <</link>> <</if>> <</nobr>>
<<nobr>> <<set _dist to ($assault_district || $war_state.target_district || "Projects")>> <<set _fac to $factions[_dist]>> /* Si le joueur revient victorieux d'une vague de combat */ <<if $raid_wave_in_progress is true>> <<set $raid_wave_in_progress to false>> <<set $counters.combats_won += 1>> <<addXP 25>> <<set $war_state.raid_wave += 1>> <</if>> /* Calcul de l'escouade de gardes du corps du gang */ <<set _squadCount to 0>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "bodyguard" or $gang_members[_g].assignment is "war">> <<set _squadCount += 1>> <</if>> <</for>> <div style="max-width: 680px; margin: 10px auto; background: linear-gradient(165deg, #1a0d0d 0%, #0d0808 100%); border: 2px solid #ff4444; border-radius: 10px; padding: 20px;"> <div style="display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #442222; padding-bottom: 10px; margin-bottom: 14px;"> <div> <h3 style="margin: 0; color: #ff6666; text-transform: uppercase; letter-spacing: 1px;">🔥 Tactical Outpost Raid: <<print _fac.name>></h3> <span style="font-size: 0.85em; color: #bbb;">District: <strong><<print _dist>></strong> | Current Enemy Defense: <strong style="color: #ffaa00;"><<print _fac.defense>> / <<print _fac.max_defense>></strong></span> </div> <div style="text-align: right; font-size: 0.85em;"> <<if $war_state.raid_wave <= 3>> <span style="background: #ff4444; color: #fff; font-weight: 800; padding: 4px 10px; border-radius: 4px;">WAVE <<print $war_state.raid_wave>> / 3</span> <<else>> <span style="background: #00ffaa; color: #111; font-weight: 800; padding: 4px 10px; border-radius: 4px;">OUTPOST CLEARED</span> <</if>> </div> </div> /* CAS 1 : LES 3 VAGUES SONT TERMINÉES -> VICTOIRE DU RAID */ <<if $war_state.raid_wave > 3>> <<set _baseDefDrop to 28 + Math.min(20, _squadCount * 4)>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - _baseDefDrop)>> <<set _lootCash to random(700, 1600) + (_fac.tribute)>> <<set _lootAmmo to random(10, 24)>> <<set $money += _lootCash>> <<set $inventory.ammo += _lootAmmo>> <<addXP 75>> <div style="border: 2px solid #00ffaa; padding: 6px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 6px;"> <img src="images/combat/fight3.gif" style="max-width: 100%; max-height: 230px; border-radius: 4px;"> </div> <p style="color: #e0e0e0;"> With the outpost lieutenant neutralized, your strike team torches the <strong><<print _fac.name>></strong> distribution hub and cracks open their safe before sirens converge on the block! </p> <div style="background: rgba(0, 255, 170, 0.1); border-left: 4px solid #00ffaa; padding: 12px 16px; margin: 14px 0; border-radius: 4px;"> <strong style="color: #00ffaa;">🏆 Raid Complete (All 3 Waves Cleared):</strong><br> • Enemy Defense Reduced: <strong style="color: #ffaa00;">-<<print _baseDefDrop>> Defense</strong> (Now <<print $factions[_dist].defense>> / <<print _fac.max_defense>>)<br> • War Chest Seized: <strong style="color: #00ffaa;">+$<<print _lootCash>></strong> & <strong>+<<print _lootAmmo>> Ammo rounds</strong><br> • Reputation XP: <strong>+75 XP</strong> </div> <div style="margin-top: 16px; text-align: center;"> <<link "Return to War Command (Smartphone)">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<set $war_state.raid_wave to 0>> <<set $menu_return_passage to $current_location>> <<goto "Phone_EmpireApp">> <</link>> </div> /* CAS 2 : PRÉPARATION DE LA VAGUE 1, 2 OU 3 */ <<else>> <<if $war_state.raid_wave is 1>> <<set _waveTitle to "Wave 1: Outer Perimeter Lookouts">> <<set _waveDesc to "Armed street lookouts and corner enforcers guarding the approach to the rival stash house.">> <<set _waveImg to "images/combat/streetpunk" + random(1, 8) + ".jpg">> <<set _enemyName to _fac.name + " Perimeter Squad">> <<set _rawHp to 65 + Math.floor(_fac.defense * 0.35)>> <<set _rawStr to 5 + Math.floor(_fac.max_defense / 55)>> <<elseif $war_state.raid_wave is 2>> <<set _waveTitle to "Wave 2: Interior Enforcer Crew">> <<set _waveDesc to "You breached the front doors! Heavy enforcers flip tables inside the stash house and open fire.">> <<set _waveImg to "images/combat/criminal" + random(1, 8) + ".jpg">> <<set _enemyName to _fac.name + " Heavy Enforcers">> <<set _rawHp to 90 + Math.floor(_fac.defense * 0.45)>> <<set _rawStr to 6 + Math.floor(_fac.max_defense / 45)>> <<else>> <<set _waveTitle to "Wave 3: Outpost Lieutenant & Bodyguards">> <<set _waveDesc to "The outpost commander emerges from the back office with his best shooters for a final stand!">> <<set _waveImg to "images/combat/fighter" + random(1, 4) + ".jpg">> <<set _enemyName to _fac.name + " Outpost Lieutenant">> <<set _rawHp to 120 + Math.floor(_fac.defense * 0.55)>> <<set _rawStr to 7 + Math.floor(_fac.max_defense / 38)>> <</if>> /* Modificateurs de Sabotage et d'Informateur */ <<if _fac.supply_sabotaged is true>> <<set _rawHp to Math.floor(_rawHp * 0.85)>> <<set _rawStr to Math.max(4, Math.floor(_rawStr * 0.85))>> <</if>> <<if _fac.informant_turned is true>> <<set _rawHp to Math.floor(_rawHp * 0.90)>> <</if>> <<if $war_state.raid_wave > 1>> <div style="background: rgba(0, 255, 170, 0.08); border: 1px solid #00ffaa; padding: 10px 14px; border-radius: 6px; margin-bottom: 12px; color: #b9f6ca;"> ✅ <strong>Wave <<print ($war_state.raid_wave - 1)>> Cleared!</strong> Take a moment to reload or patch up before engaging the next wave, or extract now with partial spoils. </div> <</if>> <div style="display: flex; gap: 10px; justify-content: center; align-items: center; border: 1px solid #442222; padding: 6px; background: #0a0606; border-radius: 6px; margin-bottom: 14px;"> <img @src="_waveImg" style="max-width: 48%; max-height: 200px; border-radius: 4px;"> <img src="images/combat/fight2.gif" style="max-width: 48%; max-height: 200px; border-radius: 4px;"> </div> <h4 style="margin: 0 0 6px 0; color: #ffaa00;"><<print _waveTitle>></h4> <p style="margin: 0 0 12px 0; color: #ccc; font-size: 0.92em;"><<print _waveDesc>></p> <div style="background: #140c0c; border: 1px solid #382020; border-radius: 6px; padding: 12px; margin-bottom: 14px; display: flex; justify-content: space-between; flex-wrap: wrap; gap: 10px; font-size: 0.9em;"> <div> <strong>Your Strike Team:</strong><br> HP: <strong style="color: #ff4444;"><<print $hp>> / <<print $maxhp>></strong> | Stamina: <strong style="color: #00ffaa;"><<print $stamina>> / <<print $maxstamina>></strong><br> Escort Squad: <strong><<print _squadCount>> soldier(s)</strong> <<if $active_firearm isnot "none">> <br>Firearm: <strong><<print $weapon_db[$active_firearm].name>></strong> (Mag: <strong style="color:#ffaa00;"><<print $gun_mag>>/<<print $weapon_db[$active_firearm].mag_size>></strong> | Res: <<print $inventory.ammo>>) <</if>> </div> <div style="text-align: right;"> <strong>Target: <<print _enemyName>></strong><br> Enemy HP: <strong style="color: #ff4444;"><<print _rawHp>></strong> | Firepower: <strong><<print _rawStr>></strong><br> <<if _fac.supply_sabotaged is true>><span style="color: #00e5ff; font-size: 0.82em;">[Supply Sabotaged: -15% Enemy Stats]</span><br><</if>> <<if _fac.informant_turned is true>><span style="color: #00ffaa; font-size: 0.82em;">[Inside Intel: -10% HP & Heavy Cover]</span><</if>> </div> </div> /* ACTIONS RAPIDES ENTRE LES VAGUES (RECHARGER / SOINS) */ <div style="background: #111; border: 1px dashed #444; border-radius: 6px; padding: 10px; margin-bottom: 16px;"> <strong style="font-size: 0.82em; color: #aaa; text-transform: uppercase;">🎒 Field Prep & Quick Supplies:</strong><br> <<if $active_firearm isnot "none" and $gun_mag < $weapon_db[$active_firearm].mag_size and $inventory.ammo > 0>> <<link "[ 🔄 Reload " + $weapon_db[$active_firearm].name + " ]">> <<set $gun_max_mag to $weapon_db[$active_firearm].mag_size>> <<set _need to $gun_max_mag - $gun_mag>> <<set _load to Math.min(_need, $inventory.ammo)>> <<set $gun_mag += _load>> <<set $inventory.ammo -= _load>> <<goto "War_Raid_Hub">> <</link>> <</if>> <<if $inventory.energy_drink > 0 and $stamina < $maxstamina>> <<link "[ ⚡ Energy Drink (+20 Stamina, x" + $inventory.energy_drink + ") ]">> <<set $inventory.energy_drink -= 1>> <<set $stamina to Math.min($maxstamina, $stamina + 20)>> <<goto "War_Raid_Hub">> <</link>> <</if>> <<if $inventory.weed > 0 and ($hp < $maxhp or $stamina < $maxstamina)>> <<link "[ 🌿 Smoke Joint (+25 HP, +15 Stamina, x" + $inventory.weed + ") ]">> <<set $inventory.weed -= 1>> <<set $hp to Math.min($maxhp, $hp + 25)>> <<set $stamina to Math.min($maxstamina, $stamina + 15)>> <<goto "War_Raid_Hub">> <</link>> <</if>> <<if $inventory.heroin > 0 and $hp < $maxhp>> <<link "[ 💉 Field Morphine/Heroin (+60 HP, -20 Sta, x" + $inventory.heroin + ") ]">> <<set $inventory.heroin -= 1>> <<set $hp to Math.min($maxhp, $hp + 60)>> <<set $stamina to Math.max(0, $stamina - 20)>> <<goto "War_Raid_Hub">> <</link>> <</if>> </div> <<set $enemy to { name: _enemyName, hp: _rawHp, max_hp: _rawHp, strength: _rawStr, img: _waveImg, action_gif: "images/combat/fight2.gif" }>> <<set $combat_return_victory to "War_Raid_Hub">> <<set $combat_return_defeat to "Combat_Lose">> <div style="display: flex; flex-direction: column; gap: 10px;"> <<if $active_firearm isnot "none" and ($gun_mag > 0 or $inventory.ammo > 0)>> <<link `"🔫 Engage Wave " + $war_state.raid_wave + " in a Tactical Firefight"`>> <<set $raid_wave_in_progress to true>> <<set $player_cover to (_fac.informant_turned is true ? 2 : 1)>> <<set $enemy_suppressed to false>> <<set $combat_log to "You advance into position and open fire on " + _enemyName + "!">> <<goto "Gunfight_Main">> <</link>> <</if>> <<link `"🗡️ Charge Wave " + $war_state.raid_wave + " in Close-Quarters Combat"`>> <<set $raid_wave_in_progress to true>> <<set $combat_log to "You lead your strike team into brutal close-quarters combat against " + _enemyName + "!">> <<goto "Combat_Main">> <</link>> <<if $war_state.raid_wave > 1>> <<link "🏃♂️ Extract Early with Partial Gains (-10 Enemy Defense, +$350)">> <<set _partialDrop to ($war_state.raid_wave - 1) * 8>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - _partialDrop)>> <<set $money += 350>> <<set $war_op_log to "<span style='color:#ffaa00;'><strong>Partial Raid Extraction:</strong> You pulled your team out after Wave " + ($war_state.raid_wave - 1) + ", dealing <strong>-" + _partialDrop + " Enemy Defense</strong> and grabbing <strong>$350</strong>.</span>">> <<set $war_state.raid_wave to 0>> <<set $combat_return_victory to "Combat_Win">> <<set $menu_return_passage to $current_location>> <<goto "Phone_EmpireApp">> <</link>> <</if>> </div> <</if>> </div> <</nobr>>
<h3>Encrypted Email — Meridian Freight Syndicate</h3> <div style="background-color: #161922; border: 1px solid #354560; border-left: 4px solid #00e5ff; padding: 16px; border-radius: 6px;"> <strong>From:</strong> dispatch@meridian-freight.onion<br> <strong>To:</strong> Undisclosed Recipient<br> <strong>Subject:</strong> Interstate Bulk Contraband Routing & Weekly Rail Manifests<br> <hr style="border-color: #2b3852;"> <p style="color: #d8e6f8; line-height: 1.5;"> "Word around the harbor is that you have an eye for high-value shipping containers—and the muscle to move them. Selling stolen port crates one by one to petty dockside fences for pennies is a waste of good cargo, and waiting on the Cartel's erratic shipping schedule leaves your warehouse gathering dust. <br><br> We are the <strong>Meridian Freight Syndicate</strong>. We control the private freight rail siding in the <strong>Outskirts</strong> and run an encrypted wholesale manifest terminal on the Dark Web. <br><br> Effective immediately, your credentials have been whitelisted: <ul> <li><strong>2 Weekly Bulk Freight Contracts:</strong> Every week, we post a specialized category requisition ($4,800/crate) and a 4–6 crate mixed boxcar manifest ($15,600–$23,400+).</li> <li><strong>Weekly Surge Commodity & Wholesale Lots:</strong> Sell individual crates ($1,400), 3-crate category lots ($6,600), or dump your entire Warehouse 12 inventory at once—paid in either <strong>Street Cash</strong> or <strong>Clean Offshore Wire</strong>.</li> </ul> Access our terminal anytime from your <strong>Desktop Computer</strong>, directly from <strong>Warehouse 12</strong>, or in person at the <strong>Outskirts Rail Siding</strong>." </p> <span style="color: #00ffaa; font-weight: bold;">// Meridian Freight Exchange (Bulk Contraband Network) is now unlocked on your Computer and in the Outskirts! //</span> </div> <br> <<link "Save Credentials & Return to Desktop">> <<set $contraband_broker_unlocked to true>> <<goto "Computer_Main">> <</link>>
<style> .meridian-wrap { max-width: 760px; margin: 10px auto; background: linear-gradient(165deg, #10151f 0%, #090c12 100%); border: 1px solid #2b3b54; border-radius: 10px; padding: 20px; box-shadow: 0 8px 26px rgba(0, 0, 0, 0.85); font-family: 'Segoe UI', Tahoma, sans-serif; } .meridian-card { background: #141a26; border: 1px solid #293850; border-left: 4px solid #00e5ff; border-radius: 8px; padding: 15px; margin-bottom: 16px; } .meridian-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); gap: 14px; margin-bottom: 16px; } </style> <<nobr>> <<if $contraband_warehouse_owned is undefined>><<set $contraband_warehouse_owned to false>><</if>> <<if $last_meridian_contract_day is undefined>><<set $last_meridian_contract_day to -7>><</if>> <<if $meridian_payout_mode is undefined>><<set $meridian_payout_mode to "cash">><</if>> <<if $meridian_log is undefined>><<set $meridian_log to "">><</if>> <<if $exchange_return is undefined or $exchange_return is "">><<set $exchange_return to "Computer_Main">><</if>> /* Calcul du bonus de courtier selon les Perks (Scavenger, Smooth Criminal, ou Contractor) */ <<set _hasBrokerPerk to ($traits.scavenger is true or $traits.smooth_criminal is true or $traits.contractor_1 is true)>> <<set _perkMult to (_hasBrokerPerk ? 1.15 : 1.0)>> /* Rafraîchissement hebdomadaire des 2 contrats et de la marchandise en forte demande */ <<set _currentDay to Math.floor($time / 1440)>> <<if _currentDay >= $last_meridian_contract_day + 7 or $meridian_contract_spec is undefined>> <<set $last_meridian_contract_day to _currentDay>> <<set $meridian_hot_item to $contraband_types.random()>> <<set _specItem to $contraband_types.random()>> <<set _specAmt to random(2, 3)>> <<set $meridian_contract_spec to { item: _specItem, amount: _specAmt, reward: Math.round(_specAmt * 4800 * _perkMult), completed: false }>> <<set _bulkAmt to random(4, 6)>> <<set $meridian_contract_bulk to { amount: _bulkAmt, reward: Math.round(_bulkAmt * 3900 * _perkMult), completed: false }>> <</if>> /* Comptage du stock dans Warehouse 12 */ <<set _totalCrates to 0>> <<for _i to 0; _i < $contraband_types.length; _i++>> <<set _cType to $contraband_types[_i]>> <<set _totalCrates += ($container_stash[_cType] || 0)>> <</for>> <div class="meridian-wrap"> <div style="display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #24324a; padding-bottom: 12px; margin-bottom: 14px; flex-wrap: wrap; gap: 10px;"> <div> <h3 style="margin: 0; color: #00e5ff; text-transform: uppercase; letter-spacing: 1px;">🚂 Meridian Black-Market Freight Exchange</h3> <span style="font-size: 0.82em; color: #8fa3bf;">Interstate Rail-Freight Smuggling & Bulk Contraband Clearinghouse</span> </div> <div style="text-align: right; font-size: 0.85em;"> <strong>Cash:</strong> <span style="color: #00ffaa;">$<<print $money>></span> | <strong>Offshore:</strong> <span style="color: #00e5ff;">$<<print $laundered_money>></span> | <strong>Depot Crates:</strong> <span style="color: #ffaa00;"><<print _totalCrates>> / <<print ($contraband_warehouse_owned ? $contraband_warehouse_capacity : 0)>></span> </div> </div> <<if $meridian_log isnot "">> <div style="background: rgba(0, 255, 170, 0.08); border-left: 4px solid #00ffaa; padding: 10px 14px; border-radius: 6px; margin-bottom: 14px; font-size: 0.9em;"> $meridian_log </div> <</if>> /* BARRE DE CONFIGURATION DU PAIEMENT & BONUS DE PERK */ <div style="background: #0d1119; border: 1px solid #25334a; border-radius: 8px; padding: 10px 14px; margin-bottom: 16px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; font-size: 0.84em;"> <div> <strong>Payout Routing:</strong> <<if $meridian_payout_mode is "cash">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ 💵 Street Cash (100% Value, +Heat) ]</span> | <<link "[ Switch to 🏦 Clean Offshore Wire (85% Value, 0 Heat) ]">><<set $meridian_payout_mode to "offshore">><<set $meridian_log to "">><<goto "Computer_ContrabandExchange">><</link>> <<else>> <<link "[ Switch to 💵 Street Cash (100% Value, +Heat) ]">><<set $meridian_payout_mode to "cash">><<set $meridian_log to "">><<goto "Computer_ContrabandExchange">><</link>> | <span style="color: #00e5ff; font-weight: bold;">[ ✔ 🏦 Clean Offshore Wire (85% Value, 0 Heat) ]</span> <</if>> </div> <div> <<if _hasBrokerPerk>> <span style="color: #ffd700; font-weight: bold;">⚡ Broker Perk Active (+15% Payouts!)</span> <<else>> <span style="color: #7f94b0;">Standard Broker Rate</span> <</if>> </div> </div> <<if $contraband_warehouse_owned is false>> <div class="meridian-card" style="border-left-color: #ff4444;"> <h4 style="margin: 0 0 6px 0; color: #ff4444;">⚠️ No Contraband Storage Depot Connected</h4> <p style="margin: 0; font-size: 0.9em; color: #ccc;"> You do not own <strong>Warehouse 12</strong> at the Port yet. Acquire the Contraband Storage Depot at the Port ($8,000) to store looted shipping containers and dispatch bulk freight shipments through Meridian. </p> </div> <<else>> /* ========================================================= */ /* SECTION 1 : CONTRATS HEBDOMADAIRES DE CONTREBANDE */ /* ========================================================= */ <h4 style="margin: 0 0 8px 0; color: #ffd700;">📋 Weekly Interstate Freight Contracts (Refreshes in <<print Math.max(1, 7 - (_currentDay - $last_meridian_contract_day))>> day(s))</h4> <div class="meridian-grid"> <!-- CONTRAT A : LOT SPÉCIALISÉ --> <div class="meridian-card" style="border-left-color: #ffd700; margin-bottom: 0;"> <strong style="color: #ffd700;">1. Targeted Syndicate Requisition</strong><br> <<if $meridian_contract_spec.completed is true>> <span style="color: #00ffaa; font-size: 0.88em;">✔ Weekly specialized manifest fulfilled. Next train departs next week.</span> <<else>> <span style="font-size: 0.86em; color: #bbb;"> A corporate buyer requires a dedicated shipment of <strong><<print $meridian_contract_spec.amount>>x Crates of <<print $meridian_contract_spec.item>></strong>. </span><br><br> <<set _haveSpec to ($container_stash[$meridian_contract_spec.item] || 0)>> <<set _specPay to ($meridian_payout_mode is "offshore" ? Math.round($meridian_contract_spec.reward * 0.85) : $meridian_contract_spec.reward)>> <strong>Stock:</strong> <span style="color: #00e5ff;"><<print _haveSpec>> / <<print $meridian_contract_spec.amount>></span> | <strong>Payout:</strong> <span style="color: #00ffaa;">$<<print _specPay>> <<print ($meridian_payout_mode is "offshore" ? "(Offshore)" : "(Cash)")>></span><br><br> <<if _haveSpec >= $meridian_contract_spec.amount>> <<link "[ 🚂 Fulfill Specialized Requisition (+$" + _specPay + ", +60 XP) ]">> <<set $container_stash[$meridian_contract_spec.item] -= $meridian_contract_spec.amount>> <<set $meridian_contract_spec.completed to true>> <<addXP 60>> <<if $meridian_payout_mode is "offshore">> <<set $laundered_money += _specPay>> <<set $meridian_log to "<strong>🚂 Specialized Contract Fulfilled:</strong> Shipped " + $meridian_contract_spec.amount + "x Crates of " + $meridian_contract_spec.item + ". <strong>$" + _specPay + "</strong> wired cleanly to your Offshore Account (<strong>0 Heat, +60 XP</strong>).">> <<else>> <<set $money += _specPay>> <<addHeat 4>> <<set $meridian_log to "<strong>🚂 Specialized Contract Fulfilled:</strong> Shipped " + $meridian_contract_spec.amount + "x Crates of " + $meridian_contract_spec.item + " for <strong>$" + _specPay + "</strong> in street cash (<strong>+4% Heat, +60 XP</strong>).">> <</if>> <<goto "Computer_ContrabandExchange">> <</link>> <<else>> <span style="color: #777; font-size: 0.85em;"><em>[ Need <<print ($meridian_contract_spec.amount - _haveSpec)>> more crate(s) of <<print $meridian_contract_spec.item>> ]</em></span> <</if>> <</if>> </div> <!-- CONTRAT B : WAGON MIXTE EN VRAC --> <div class="meridian-card" style="border-left-color: #00ffaa; margin-bottom: 0;"> <strong style="color: #00ffaa;">2. Mixed Freight Boxcar Manifest</strong><br> <<if $meridian_contract_bulk.completed is true>> <span style="color: #00ffaa; font-size: 0.88em;">✔ Weekly mixed boxcar manifest fulfilled. Next boxcar arrives next week.</span> <<else>> <span style="font-size: 0.86em; color: #bbb;"> Fill an interstate freight car with <strong>any <<print $meridian_contract_bulk.amount>>x Contraband Crates</strong> of any category from your depot. </span><br><br> <<set _bulkPay to ($meridian_payout_mode is "offshore" ? Math.round($meridian_contract_bulk.reward * 0.85) : $meridian_contract_bulk.reward)>> <strong>Total Crates:</strong> <span style="color: #00e5ff;"><<print _totalCrates>> / <<print $meridian_contract_bulk.amount>></span> | <strong>Payout:</strong> <span style="color: #00ffaa;">$<<print _bulkPay>> <<print ($meridian_payout_mode is "offshore" ? "(Offshore)" : "(Cash)")>></span><br><br> <<if _totalCrates >= $meridian_contract_bulk.amount>> <<link "[ 🚚 Load " + $meridian_contract_bulk.amount + " Mixed Crates onto Boxcar (+$" + _bulkPay + ", +80 XP) ]">> <<set _toRemove to $meridian_contract_bulk.amount>> <<for _rIdx to 0; _rIdx < $contraband_types.length; _rIdx++>> <<set _rType to $contraband_types[_rIdx]>> /* Prioriser les caisses qui ne sont pas l'objet en forte demande */ <<if _rType isnot $meridian_hot_item and ($container_stash[_rType] || 0) > 0 and _toRemove > 0>> <<set _take to Math.min($container_stash[_rType], _toRemove)>> <<set $container_stash[_rType] -= _take>> <<set _toRemove -= _take>> <</if>> <</for>> <<if _toRemove > 0>> <<set $container_stash[$meridian_hot_item] -= _toRemove>> <</if>> <<set $meridian_contract_bulk.completed to true>> <<addXP 80>> <<if $meridian_payout_mode is "offshore">> <<set $laundered_money += _bulkPay>> <<set $meridian_log to "<strong>🚚 Mixed Boxcar Manifest Completed:</strong> Loaded " + $meridian_contract_bulk.amount + " mixed contraband crates onto the outbound freight train. <strong>$" + _bulkPay + "</strong> deposited into your Offshore Account (<strong>0 Heat, +80 XP</strong>).">> <<else>> <<set $money += _bulkPay>> <<addHeat 5>> <<set $meridian_log to "<strong>🚚 Mixed Boxcar Manifest Completed:</strong> Loaded " + $meridian_contract_bulk.amount + " mixed contraband crates for <strong>$" + _bulkPay + "</strong> in cash (<strong>+5% Heat, +80 XP</strong>).">> <</if>> <<goto "Computer_ContrabandExchange">> <</link>> <<else>> <span style="color: #777; font-size: 0.85em;"><em>[ Need <<print ($meridian_contract_bulk.amount - _totalCrates)>> more crate(s) in Warehouse 12 ]</em></span> <</if>> <</if>> </div> </div> /* ========================================================= */ /* SECTION 2 : MARCHÉ DE GROS & LIQUIDATION EN VRAC */ /* ========================================================= */ <div class="meridian-card"> <div style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; margin-bottom: 10px;"> <h4 style="margin: 0; color: #00e5ff;">📦 Wholesale Bulk Spot Market</h4> <span style="font-size: 0.82em; background: rgba(255, 170, 0, 0.15); border: 1px solid #ffaa00; color: #ffd700; padding: 2px 8px; border-radius: 4px;"> 🔥 Weekly Surge Commodity: <strong><<print $meridian_hot_item>> ($<<print Math.round(3200 * _perkMult)>>/crate)</strong> </span> </div> <div style="font-size: 0.82em; color: #99a8bf; margin-bottom: 12px;"> Standard Wholesale: <strong>$<<print Math.round(1400 * _perkMult)>>/crate</strong> | Bulk Lot (3+ of same type): <strong>$<<print Math.round(2200 * _perkMult)>>/crate</strong> | Weekly Surge (<<print $meridian_hot_item>>): <strong>$<<print Math.round(3200 * _perkMult)>>/crate</strong> </div> <<for _i to 0; _i < $contraband_types.length; _i++>> <<set _cType to $contraband_types[_i]>> <<set _qty to ($container_stash[_cType] || 0)>> <<set _isHot to (_cType is $meridian_hot_item)>> <<set _singleUnit to Math.round((_isHot ? 3200 : 1400) * _perkMult)>> <<set _bulkUnit to Math.round((_isHot ? 3200 : 2200) * _perkMult)>> <<if $meridian_payout_mode is "offshore">> <<set _singleUnit to Math.round(_singleUnit * 0.85)>> <<set _bulkUnit to Math.round(_bulkUnit * 0.85)>> <</if>> <<set _allTotal to (_qty >= 3 ? (_qty * _bulkUnit) : (_qty * _singleUnit))>> <<capture _cType, _qty, _singleUnit, _bulkUnit, _allTotal, _isHot>> <div style="display: flex; justify-content: space-between; align-items: center; padding: 8px 10px; border-bottom: 1px solid #222c40; flex-wrap: wrap; gap: 8px;"> <div> <strong><<print _cType>></strong> <<if _isHot>> <span style="color: #ffd700; font-size: 0.76em; font-weight: bold;">🔥 SURGE DEMAND</span> <</if>> — <<if _qty > 0>> <span style="color: #00ffaa; font-weight: bold;"><<print _qty>> crate(s)</span> <<else>> <span style="color: #666;">0 crates</span> <</if>> </div> <div style="font-size: 0.85em;"> <<if _qty >= 1>> <<link "[ Sell 1x (+$" + _singleUnit + ") ]">> <<set $container_stash[_cType] -= 1>> <<if $meridian_payout_mode is "offshore">> <<set $laundered_money += _singleUnit>> <<else>> <<set $money += _singleUnit>> <<addHeat 1>> <</if>> <<set $meridian_log to "Sold 1x Crate of <strong>" + _cType + "</strong> for <strong>$" + _singleUnit + "</strong>.">> <<goto "Computer_ContrabandExchange">> <</link>> <</if>> <<if _qty >= 3>> | <<set _lot3Pay to (_bulkUnit * 3)>> <<link "[ 📦 Sell 3x Bulk Lot (+$" + _lot3Pay + ") ]">> <<set $container_stash[_cType] -= 3>> <<addXP 20>> <<if $meridian_payout_mode is "offshore">> <<set $laundered_money += _lot3Pay>> <<else>> <<set $money += _lot3Pay>> <<addHeat 2>> <</if>> <<set $meridian_log to "<strong>📦 Bulk Lot Sold:</strong> Dispatched 3x Crates of <strong>" + _cType + "</strong> at bulk rate for <strong>$" + _lot3Pay + "</strong> (<strong>+20 XP</strong>).">> <<goto "Computer_ContrabandExchange">> <</link>> <</if>> <<if _qty >= 2>> | <<link "[ 🚚 Sell All " + _qty + "x (+$" + _allTotal + ") ]">> <<set $container_stash[_cType] to 0>> <<addXP `_qty * 6`>> <<if $meridian_payout_mode is "offshore">> <<set $laundered_money += _allTotal>> <<else>> <<set $money += _allTotal>> <<addHeat `Math.min(6, _qty)`>> <</if>> <<set $meridian_log to "<strong>🚚 Category Cleared:</strong> Sold all " + _qty + "x Crates of <strong>" + _cType + "</strong> for <strong>$" + _allTotal + "</strong>.">> <<goto "Computer_ContrabandExchange">> <</link>> <</if>> </div> </div> <</capture>> <</for>> /* BOUTON DE LIQUIDATION TOTALE DE L'ENTREPÔT */ <<if _totalCrates >= 2>> <<set _grandTotal to 0>> <<for _gIdx to 0; _gIdx < $contraband_types.length; _gIdx++>> <<set _gType to $contraband_types[_gIdx]>> <<set _gQty to ($container_stash[_gType] || 0)>> <<if _gQty > 0>> <<set _gHot to (_gType is $meridian_hot_item)>> <<set _gRate to Math.round((_gHot ? 3200 : (_totalCrates >= 3 ? 2200 : 1400)) * _perkMult)>> <<if $meridian_payout_mode is "offshore">><<set _gRate to Math.round(_gRate * 0.85)>><</if>> <<set _grandTotal += (_gQty * _gRate)>> <</if>> <</for>> <div style="margin-top: 14px; padding-top: 12px; border-top: 1px dashed #354560; text-align: center;"> <<link "[ 🚂 Liquidate Entire Warehouse Stash (" + _totalCrates + " Crates — +$" + _grandTotal + ") ]">> <<for _cIdx to 0; _cIdx < $contraband_types.length; _cIdx++>> <<set $container_stash[$contraband_types[_cIdx]] to 0>> <</for>> <<addXP `_totalCrates * 8`>> <<if $meridian_payout_mode is "offshore">> <<set $laundered_money += _grandTotal>> <<set $meridian_log to "<strong>🚂 Full Depot Liquidation:</strong> Cleared all <strong>" + _totalCrates + " crates</strong> from Warehouse 12 and wired <strong>$" + _grandTotal + "</strong> cleanly to your Offshore Account!">> <<else>> <<set $money += _grandTotal>> <<addHeat `Math.min(8, _totalCrates)`>> <<set $meridian_log to "<strong>🚂 Full Depot Liquidation:</strong> Cleared all <strong>" + _totalCrates + " crates</strong> from Warehouse 12 for <strong>$" + _grandTotal + "</strong> in street cash!">> <</if>> <<goto "Computer_ContrabandExchange">> <</link>> </div> <</if>> </div> <</if>> <div style="border-top: 1px solid #24324a; padding-top: 12px; text-align: right;"> <<link "🚪 Close Freight Exchange">> <<set $meridian_log to "">> <<goto $exchange_return>> <</link>> </div> </div> <</nobr>>
v0.0.1 Alpha
<h3>Grand Theft Auto</h3> You scout the streets of the <<print $current_location>> looking for a vehicle worth stealing. /* --- CALCUL DE L'HEURE ACTUELLE --- */ /* On extrait l'heure (0-23) à partir de la variable totale $time */ <<set _currentHour to Math.floor(($time % 1440) / 60)>> /* Il fait nuit si l'heure est supérieure ou égale à 22 (22h, 23h) OU inférieure à 6 (0h, 1h... 5h) */ <<set _isNight to (_currentHour >= 22 or _currentHour < 6)>> <<set _maxGarageCapacity to $garage_level * 2>> <strong>Garage Capacity:</strong> $stolen_vehicles.length / _maxGarageCapacity --- /* --- VÉRIFICATION DES RESTRICTIONS --- */ <<if $has_hotwire_kit is false>> <span style="color: #ff4444;"><em>You don't have the tools for this. You need to buy a Hotwire Kit from the Chop Shop.</em></span><br><br> <<elseif _isNight is false>> <span style="color: #ffaa00;"><em>There are too many witnesses and police patrols right now. You need to come back late at night (After 22:00).</em></span><br><br> <<elseif $garage_level is 0>> <span style="color: #ff4444;"><em>You need to buy and upgrade a Garage at your safehouse before you can store stolen cars.</em></span><br><br> <<elseif $stolen_vehicles.length >= _maxGarageCapacity>> <span style="color: #ffaa00;"><em>Your garage is completely full. You have nowhere to stash another vehicle.</em></span><br><br> <<else>> /* --- TOUT EST BON, ON PEUT VOLER --- */ <<link "Scout the area (Costs 20 Stamina)">> <<set $stamina -= 20>> <<set $hotwire_context to "freeroam">> /* Génération pondérée selon le quartier */ <<set _roll to random(1, 100)>> <<if $current_location is "Financial">> <<if _roll <= 35>><<set $stolen_car_candidate to "Sports Car">> <<elseif _roll <= 60>><<set $stolen_car_candidate to "Hypercar">> <<elseif _roll <= 90>><<set $stolen_car_candidate to "Sedan">> <<else>><<set $stolen_car_candidate to "SUV">> <</if>> <<elseif $current_location is "Neon">> <<if _roll <= 40>><<set $stolen_car_candidate to "Sports Car">> <<elseif _roll <= 75>><<set $stolen_car_candidate to "Sedan">> <<elseif _roll <= 95>><<set $stolen_car_candidate to "SUV">> <<else>><<set $stolen_car_candidate to "Hypercar">> <</if>> <<elseif $current_location is "Slums">> <<if _roll <= 50>><<set $stolen_car_candidate to "Sedan">> <<elseif _roll <= 90>><<set $stolen_car_candidate to "Van">> <<else>><<set $stolen_car_candidate to "SUV">> <</if>> <<else>> /* Port et Outskirts */ <<if _roll <= 45>><<set $stolen_car_candidate to "Van">> <<elseif _roll <= 80>><<set $stolen_car_candidate to "SUV">> <<elseif _roll <= 95>><<set $stolen_car_candidate to "Sedan">> <<else>><<set $stolen_car_candidate to "Sports Car">> <</if>> <</if>> <<goto "Minigame_Hotwire">> <</link>><br> <</if>> <br>---<br> <<link "Disappear into the streets">> <<goto $current_location>> <</link>>
<style> .stream-studio-wrap { max-width: 680px; margin: 10px auto; background: linear-gradient(165deg, #0d0714 0%, #150a21 60%, #09050d 100%); border: 2px solid #ff007f; border-radius: 12px; box-shadow: 0 0 28px rgba(255, 0, 127, 0.25), inset 0 0 20px rgba(138, 43, 226, 0.15); padding: 20px; font-family: 'Segoe UI', Roboto, sans-serif; color: #f0e6ff; } .stream-top-bar { display: flex; justify-content: space-between; align-items: center; background: rgba(20, 8, 32, 0.85); border: 1px solid rgba(255, 0, 127, 0.4); border-radius: 8px; padding: 10px 16px; margin-bottom: 16px; } .stream-live-pill { display: inline-flex; align-items: center; gap: 8px; background: rgba(255, 0, 85, 0.2); border: 1px solid #ff0055; color: #ff4488; font-weight: 800; font-size: 0.82em; letter-spacing: 1.5px; padding: 4px 10px; border-radius: 20px; text-transform: uppercase; } .stream-live-dot { width: 9px; height: 9px; background: #ff0055; border-radius: 50%; box-shadow: 0 0 8px #ff0055; animation: streamPulse 1s infinite alternate; } @keyframes streamPulse { 0% { opacity: 0.4; transform: scale(0.9); } 100% { opacity: 1; transform: scale(1.15); } } .stream-viewport { position: relative; border: 2px solid #3d1c5c; border-radius: 10px; background: radial-gradient(circle at center, #1b0c2e 0%, #07030c 100%); height: 330px; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; overflow: hidden; box-shadow: inset 0 0 30px rgba(0, 0, 0, 0.9); } #image-display { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } #image-display img { max-width: 100%; max-height: 315px; object-fit: contain; display: block; margin: 0 auto; border-radius: 6px; } .stream-request-banner { background: linear-gradient(90deg, rgba(0, 255, 170, 0.08) 0%, rgba(0, 255, 170, 0.18) 50%, rgba(0, 255, 170, 0.08) 100%); border: 1px solid #00ffaa; border-radius: 8px; padding: 12px 18px; margin-bottom: 18px; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 0 15px rgba(0, 255, 170, 0.15); } .stream-controls-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; } .stream-controls-grid button { width: 100%; padding: 12px 8px !important; background: linear-gradient(180deg, #2a1142 0%, #160726 100%) !important; border: 1px solid #b829ff !important; border-radius: 8px !important; color: #fff !important; font-weight: 700 !important; font-size: 0.95em !important; letter-spacing: 0.5px; cursor: pointer; transition: all 0.15s ease; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.4); } .stream-controls-grid button:hover { background: linear-gradient(180deg, #ff007f 0%, #99004d 100%) !important; border-color: #ff66b2 !important; box-shadow: 0 0 14px rgba(255, 0, 127, 0.6); transform: translateY(-1px); } </style> <<nobr>> /* --- INITIALISATION DES VARIABLES --- */ <<set $mg_start_time to $time>> <<set $mg_round to 1>> <<set $mg_max_time to 15>> <<set $mg_current_time to $mg_max_time>> <<set $mg_actions to ["Solo", "BJ", "VG", "AN"]>> <<set $stamina -= 15>> /* L'action que le chat demande */ <<set $mg_target_action to $mg_actions.random()>> /* L'action qu'elle fait actuellement à l'écran (au début du stream, disons "Solo" par défaut) */ <<set $mg_current_image to "Solo">> <<set $minigame_active to true>> /* --- INTERFACE DU JEU --- */ <div class="stream-studio-wrap"> /* HEADER / TIMER & ROUND */ <div class="stream-top-bar"> <div> <span class="stream-live-pill"><span class="stream-live-dot"></span> LIVE CAM BROADCAST</span> <div style="font-size: 0.8em; color: #b39ddb; margin-top: 4px;">VIP Request Sequence: <strong id="round-display" style="color: #fff;">$mg_round</strong> / 10</div> </div> <div style="text-align: right;"> <div style="font-size: 0.72em; color: #ff80bf; letter-spacing: 1px; text-transform: uppercase;">Viewer Patience</div> <div style="font-size: 1.65em; font-weight: 900; color: #ffaa00; font-family: monospace;"> <span id="timer-display">$mg_current_time</span>s </div> </div> </div> /* IMAGE ACTION (Affiche l'action en cours) */ <div class="stream-viewport"> <span id="image-display"><<showStreamImage $mg_current_image>></span> </div> /* PROCHAINE ACTION À FAIRE */ <div class="stream-request-banner"> <span style="font-size: 0.9em; color: #a5d6a7; text-transform: uppercase; letter-spacing: 1px;">💬 Top Tip Request:</span> <span id="target-display" style="font-size: 1.35em; font-weight: 900; color: #00ffaa; text-transform: uppercase; letter-spacing: 1.5px; text-shadow: 0 0 10px rgba(0,255,170,0.5);">$mg_target_action</span> </div> /* LES 4 BOUTONS (GRID) */ <div class="stream-controls-grid"> /* Bouton SOLO */ <div> <<button "✨ SOLO">> <<if $minigame_active is true>> <<if $mg_target_action is "Solo">> <<set $mg_round += 1>> <<if $mg_round > 10>> <<set $minigame_active to false>> <<goto "Minigame_Win">> <<else>> <<set $mg_max_time -= 1>> <<set $mg_current_time to $mg_max_time>> <<set $mg_current_image to $mg_target_action>> <<set $mg_target_action to $mg_actions.random()>> <<set $time += 5>> <<replace "#target-display">>$mg_target_action<</replace>> <<replace "#round-display">>$mg_round<</replace>> <<replace "#timer-display">>$mg_current_time<</replace>> <<replace "#image-display">><<showStreamImage $mg_current_image>><</replace>> <</if>> <<else>> <<set $mg_current_time -= 2>> <<replace "#timer-display">>$mg_current_time<</replace>> <</if>> <</if>> <</button>> </div> /* Bouton BJ */ <div> <<button "💋 ORAL (BJ)">> <<if $minigame_active is true>> <<if $mg_target_action is "BJ">> <<set $mg_round += 1>> <<if $mg_round > 10>> <<set $minigame_active to false>> <<goto "Minigame_Win">> <<else>> <<set $mg_max_time -= 1>> <<set $mg_current_time to $mg_max_time>> <<set $mg_current_image to $mg_target_action>> <<set $mg_target_action to $mg_actions.random()>> <<set $time += 5>> <<replace "#target-display">>$mg_target_action<</replace>> <<replace "#round-display">>$mg_round<</replace>> <<replace "#timer-display">>$mg_current_time<</replace>> <<replace "#image-display">><<showStreamImage $mg_current_image>><</replace>> <</if>> <<else>> <<set $mg_current_time -= 2>> <<replace "#timer-display">>$mg_current_time<</replace>> <</if>> <</if>> <</button>> </div> /* Bouton VAGINAL */ <div> <<button "🔥 VAGINAL (VG)">> <<if $minigame_active is true>> <<if $mg_target_action is "VG">> <<set $mg_round += 1>> <<if $mg_round > 10>> <<set $minigame_active to false>> <<goto "Minigame_Win">> <<else>> <<set $mg_max_time -= 1>> <<set $mg_current_time to $mg_max_time>> <<set $mg_current_image to $mg_target_action>> <<set $mg_target_action to $mg_actions.random()>> <<set $time += 5>> <<replace "#target-display">>$mg_target_action<</replace>> <<replace "#round-display">>$mg_round<</replace>> <<replace "#timer-display">>$mg_current_time<</replace>> <<replace "#image-display">><<showStreamImage $mg_current_image>><</replace>> <</if>> <<else>> <<set $mg_current_time -= 2>> <<replace "#timer-display">>$mg_current_time<</replace>> <</if>> <</if>> <</button>> </div> /* Bouton ANAL */ <div> <<button "⚡ ANAL (AN)">> <<if $minigame_active is true>> <<if $mg_target_action is "AN">> <<set $mg_round += 1>> <<if $mg_round > 10>> <<set $minigame_active to false>> <<goto "Minigame_Win">> <<else>> <<set $mg_max_time -= 1>> <<set $mg_current_time to $mg_max_time>> <<set $mg_current_image to $mg_target_action>> <<set $mg_target_action to $mg_actions.random()>> <<set $time += 5>> <<replace "#target-display">>$mg_target_action<</replace>> <<replace "#round-display">>$mg_round<</replace>> <<replace "#timer-display">>$mg_current_time<</replace>> <<replace "#image-display">><<showStreamImage $mg_current_image>><</replace>> <</if>> <<else>> <<set $mg_current_time -= 2>> <<replace "#timer-display">>$mg_current_time<</replace>> <</if>> <</if>> <</button>> </div> </div> </div> /* --- LE CHRONOMÈTRE (BOUCLE SUGARCUBE) --- */ <<repeat 1s>> <<if $minigame_active is true>> <<set $mg_current_time -= 1>> <<replace "#timer-display">>$mg_current_time<</replace>> <<if $mg_current_time <= 0>> <<set $minigame_active to false>> <<goto "Minigame_Fail">> <</if>> <</if>> <</repeat>> <</nobr>>
<h3>Police Station - Front Desk</h3> <<nobr>> You lean on the counter, flashing your best smile at Officer Davis. You start chatting her up, complaining about the paperwork, complimenting her uniform, and subtly suggesting that there must be a way to "streamline" the release process for your friends. /* --- JET DE CHARISME --- */ <<set _seduceRoll to random(1, 100) + ($charisma * 2)>> <<if _seduceRoll >= 60>> /* --- SUCCÈS --- */ She bites her lower lip, glancing around the empty lobby. "You know... the captain is out on patrol. My office is in the back records room. Why don't we go review those release forms together?" <br><br> <div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/Police/7.webp" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> You follow her down a narrow hallway. As soon as the door of the records room clicks shut, she grabs your collar and pushes you against the cold metal filing cabinets. She's clearly been incredibly frustrated, and the uniform drops to the floor in seconds. <br><br> <<set _prefix to "images/Sex/Police/seduced/">> <<set _max to 13>> <div style="text-align: center; margin: 20px 0;"> <<randomImage _prefix _max 0 "#0055ff">> </div> <div style="padding: 10px; background-color: #111; border-left: 3px solid #0055ff; color: #ccc;"> You spend the next twenty minutes bending Officer Davis over the metal filing cabinets. The sound of skin slapping against skin echoes in the tight room, masked only by the low hum of the precinct's AC unit. She bites her hand to muffle her moans, desperately taking everything you give her. It turns out, a little stress relief was exactly what she needed to look the other way... </div> <br> Panting, she quickly fixes her hair and adjusts her badge. "Alright. I'll waive the station fees and cut the bail down. Just don't make a habit of getting your girls caught." <br><br> <span style="color: #00ffaa;"><strong>Success!</strong> Bail price reduced for today.</span> <<set $stamina -= 10>> <<addXP 20>> <<set $daily_station_seduced to true>> <br><br> <<link "Finish up and head back to the desk">> <<goto "Location_PoliceStation">> <</link>> <<else>> /* --- ÉCHEC --- */ <<if $heat >= 60>> She stops typing, narrows her eyes at your face, and glances at the MOST WANTED bulletin on her monitor. "Wait a second... you're on the federal taskforce watchlist! Hands behind your back, NOW!" <br><br> <span style="color: #ff4444;"><strong>BUSTED!</strong> Four officers tackle you to the floor and slap cuffs on your wrists!</span> <br><br> <<link "Get dragged to Booking">> <<goto "Prison_Intake">> <</link>> <<else>> She stops typing, crosses her arms, and glares at you, completely unamused. "Save it. The bail is what the judge set it at. Pay up or get out of my lobby before I find a reason to put you in a cell next to them." <br><br> <span style="color: #ff4444;"><strong>Charisma Check Failed.</strong> She's not buying it.</span> <<set $daily_station_seduced to "failed">> <br><br> <<link "Step back in defeat">> <<goto "Location_PoliceStation">> <</link>> <</if>> <</if>> <</nobr>>
<h3>Gang Hideout - <<print $current_location>></h3> <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img src="images/combat/event1.jpg" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> </div> You kick open the rusty door of the abandoned warehouse. Inside, three heavily armed thugs turn to look at you. In the corner, tied to a chair and looking terrified, is <<print $network_girls[$rescue_target_index].name>>. The leader, a scarred man with a shotgun resting on his shoulder, spits on the ground. "You've got guts showing up here alone. The girl belongs to us now, unless you've brought the <strong>$3000</strong> ransom." <br><br> /* On englobe tous les choix dans une div pour pouvoir les faire disparaître quand on clique */ <div id="rescue-action"> /* --- OPTION 1 : PAYER LA RANÇON --- */ <<if $money >= 3000>> <<link "Pay the Ransom ($3000)">> <<replace "#rescue-action">> You toss a duffel bag of cash at his feet. The leader counts it, smirks, and gestures for his men to untie her. "A pleasure doing business with you. Now get out." <br><br> <span style="color: #00ffaa;"><strong>Success!</strong> You bought her freedom.</span> <<set $money -= 3000>> <<set $network_girls[$rescue_target_index].status to "active">> <<set $network_girls[$rescue_target_index].location to "hideout">> <<set $network_girls[$rescue_target_index].days_in_trouble to 0>> <br><br> <<link "Take her and leave">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<goto $current_location>><</link>> <</replace>> <</link>><br> <<else>> <span style="color: #ff4444;"><em>You don't have enough money ($3000) to pay the ransom.</em></span><br><br> <</if>> /* --- OPTION 2 : INTIMIDATION (CHARISMA CHECK) --- */ <<link "Intimidate the leader">> <<replace "#rescue-action">> You step forward, ignoring the guns pointed at you. You invoke the name of the cartel you work with on the Dark Web and explain exactly what will happen to this warehouse if they don't let her go immediately. <br><br> <<set _intimidationRoll to random(1, 100) + ($charisma * 3)+($strength * 2)>> <<if _intimidationRoll >= 75>> The leader's face goes pale. He realizes you're not a simple street pimp, but someone connected to very dangerous people. He lowers his weapon. "Alright, man, take it easy. We didn't know she was with you. Cut her loose." <br><br> <span style="color: #00ffaa;"><strong>Success!</strong> You intimidated them into backing down.</span> <<set $network_girls[$rescue_target_index].status to "active">> <<set $network_girls[$rescue_target_index].location to "hideout">> <<set $network_girls[$rescue_target_index].days_in_trouble to 0>> <<addXP 50>> <br><br> <<link "Take her and leave">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<goto $current_location>><</link>> <<else>> The thugs burst out laughing. "You think we give a shit about your threats? You're in our territory now!" The leader cocks his shotgun. "Looks like we're keeping the girl AND whatever is in your pockets!" <br><br> <span style="color: #ff4444;"><strong>Intimidation Failed! They attack!</strong></span> <br><br> <<link "Defend yourself!">> <<set $enemy to { name: "Rival Thugs", hp: 120, max_hp: 120, strength: 8 }>> <<set $combat_return_victory to "Rescue_Victory">> <<set $combat_return_defeat to "Rescue_Defeat">> <<if $active_firearm isnot "none" and ($gun_mag > 0 or $inventory.ammo > 0)>> <<set $player_cover to 1>> <<set $enemy_suppressed to false>> <<set $combat_log to "You flip a heavy wooden table for cover and draw your " + $weapon_db[$active_firearm].name + "!">> <<goto "Gunfight_Main">> <<else>> <<goto "Combat_Main">> <</if>> <</link>> <</if>> <</replace>> <</link>> /* --- OPTION 3 : COMBAT DIRECT --- */ <br><br> <<link "Draw your weapon and attack (Combat)">> <<replace "#rescue-action">> You don't bother negotiating with scum. You draw your weapon and charge in! <br><br> <<link "Start Combat">> <<set $enemy to { name: "Rival Thugs", hp: 120, max_hp: 120, strength: 8 }>> <<set $combat_return_victory to "Rescue_Victory">> <<set $combat_return_defeat to "Rescue_Defeat">> <<if $active_firearm isnot "none" and ($gun_mag > 0 or $inventory.ammo > 0)>> <<set $player_cover to 1>> <<set $enemy_suppressed to false>> <<set $combat_log to "You breach the hideout with your " + $weapon_db[$active_firearm].name + " raised!">> <<goto "Gunfight_Main">> <<else>> <<goto "Combat_Main">> <</if>> <</link>> <</replace>> <</link>> </div>
<h3>Outskirts Bar - Restroom</h3> The restroom smells intensely of cheap bleach and old urine. The fluorescent light above flickers erratically, casting harsh shadows over the graffiti-covered walls. In the last stall, you notice a crudely cut hole in the wooden partition. <hr style="border-color: #444;"> <div id="gloryhole_action"> <<link "Wait on the receiving end (Takes 30 minutes)">> <<replace "#gloryhole_action">> <<set $time += 30>> <<set _rng to random(1, 100)>> <<if _rng <= 30>> You wait in the cramped stall for half an hour, but nobody shows up on the other side. You just wasted your time in a filthy bathroom. <br><br> <<else>> You hear shuffling on the other side of the partition. Someone approaches the hole. <br><br> <<randomImage "images/Sex/gloryhole/" 24 0 "#ed2939">> <br><br> An anonymous stranger takes care of you. It is degrading, dirty, and exactly what you needed. <br><br> <</if>> <<link "Wash up and return to the bar">><<goto "Location_OutskirtsBar">><</link>> <</replace>> <</link>> </div> <br><hr style="border-color: #444;"><br> <<link "Leave the restroom">><<goto "Location_OutskirtsBar">><</link>>
/* On charge les données de la fille sélectionnée */ <<set _girl to $basement_captives[$current_captive]>> <h3>Cell - _girl.name</h3> <<nobr>> <<showCellImage>>\ <<if $cell_log isnot "">> $cell_log <br>---<br> <</if>>\ <strong>Discipline:</strong> _girl.discipline% | <strong>Base Value:</strong> $<<print _girl.base_income>>/day<br> <strong>Status:</strong> <<if _girl.tied>>Tied to the wall<<else>>Free to move in the cell<</if>> | <strong>Wallet:</strong> $<<print $money>> <hr style="border-color: #444;"> <strong>Conditioning Actions (Takes 30 mins):</strong><br><br> /* --- SI ELLE EST ATTACHÉE --- */ <<if _girl.tied is true>> /* Action de Base */ <<if $stamina >= 5>> <<link "Play with your captive (+1 Discipline)">> <<set _oldTime to $time>><<set $time += 30>> <<useSexStamina 5>> <<set $basement_captives[$current_captive].discipline to Math.min(100, $basement_captives[$current_captive].discipline + 1)>> <<set $cell_action to "toy">> <<set $cell_log to "You play with " + _girl.name + "'s body. She struggles helplessly against her restraints.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Basement_Cell">><</if>> <</link>><br> <</if>> /* Palier 25 */ <<if _girl.discipline >= 25 and $stamina >= 10>> <<link "Force Blowjob (+2 Discipline)">> <<set _oldTime to $time>><<set $time += 30>> <<useSexStamina 10>> <<set $basement_captives[$current_captive].discipline to Math.min(100, $basement_captives[$current_captive].discipline + 2)>> <<set $cell_action to "bj">> <<set $cell_log to "You force yourself into " + _girl.name + "'s mouth. She gags but ultimately submits to your demands.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Basement_Cell">><</if>> <</link>><br> <</if>> /* Palier 50 */ <<if _girl.discipline >= 50 and $stamina >= 10>> <<link "Fuck her tied up (+3 Discipline)">> <<set _oldTime to $time>><<set $time += 30>> <<useSexStamina 10>> <<set $basement_captives[$current_captive].discipline to Math.min(100, $basement_captives[$current_captive].discipline + 3)>> <<set $counters.rough += 1>> <<set $cell_action to "sex_b">> <<set $cell_log to "You roughly use " + _girl.name + "'s tied body. Her will is clearly breaking down.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Basement_Cell">><</if>> <</link>><br> <</if>> /* Palier 75 - Détachement */ <<if _girl.discipline >= 75>> <br><strong>Restraints:</strong><br> <<link "Untie her">> <<set $basement_captives[$current_captive].tied to false>> <<set $cell_action to "idle">> <<set $cell_log to "You undo the heavy straps. " + _girl.name + " rubs her wrists but keeps her head down, completely broken.">> <<goto "Basement_Cell">> <</link>><br> <</if>> /* --- SI ELLE EST DÉTACHÉE --- */ <<else>> <<if $stamina >= 10>> <<link "Have sex (Untied)">> <<set _oldTime to $time>><<set $time += 30>> <<useSexStamina 10>> <<set $cell_action to "sex">> <<set $cell_log to "You enjoy " + _girl.name + " without needing any restraints. She eagerly tries to please you, afraid of punishment.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Basement_Cell">><</if>> <</link>><br><br> <</if>> <strong>Restraints:</strong><br> <<link "Tie her back up">> <<set $basement_captives[$current_captive].tied to true>> <<set $cell_action to "idle_b">> <<set $cell_log to "You order " + _girl.name + " to present her wrists. She obeys silently as you lock her back against the wall.">> <<goto "Basement_Cell">> <</link>><br> <</if>> <<if _girl.discipline >= 50 and $stamina >= 5>> <br><strong>Climax:</strong><br> <<link "Finish and step back">> <<set _oldTime to $time>><<set $time += 10>> <<useSexStamina 5>> <<set $cell_action to "finishers">> <<set $cell_log to "You pull away and finish, leaving " + _girl.name + " panting and exhausted.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Basement_Cell">><</if>> <</link>><br> <</if>> /* --- INVESTISSEMENTS & AMÉLIORATIONS DE LA CAPTIVE --- */ <br><hr style="border-color: #444;"> <strong>Asset Investments & Upgrades:</strong><br> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00aaff; margin-top: 8px;"> /* 1. Caméra / Équipement de Stream */ <<if _girl.has_streaming_gear is true>> <span style="color: #00ffaa;">✔ 4K Streaming Rig Installed</span><br> <<elseif $money >= 500>> <<link "[ Buy 4K Streaming Rig ($500 — Required for Hangar) ]">> <<set $money -= 500>> <<set $basement_captives[$current_captive].has_streaming_gear to true>> <<set $cell_log to "Equipped " + _girl.name + " with a dedicated 4K streaming kit.">> <<goto "Basement_Cell">> <</link>><br> <<else>> <span style="color: #888;">[ 4K Streaming Rig ($500) — Insufficient funds ]</span><br> <</if>> /* 2. Tenues & Lingerie (Niveaux 1 et 2) */ <<if _girl.clothes_level is 0>> <<if $money >= 400>> <<link "[ Buy Provocative Streetwear ($400 -> +$15/day Base Income) ]">> <<set $money -= 400>> <<set $basement_captives[$current_captive].clothes_level to 1>> <<set $basement_captives[$current_captive].base_income += 15>> <<set $cell_log to "Bought provocative outfits for " + _girl.name + " (+$15/day base value).">> <<goto "Basement_Cell">> <</link>><br> <<else>> <span style="color: #888;">[ Provocative Streetwear ($400) — Insufficient funds ]</span><br> <</if>> <<elseif _girl.clothes_level is 1>> <<if $money >= 1200>> <<link "[ Buy Luxury Designer Lingerie ($1,200 -> +$25/day Base Income, Required for VIP Escort) ]">> <<set $money -= 1200>> <<set $basement_captives[$current_captive].clothes_level to 2>> <<set $basement_captives[$current_captive].base_income += 25>> <<set $cell_log to "Dressed " + _girl.name + " in luxury designer lingerie (+$25/day base value).">> <<goto "Basement_Cell">> <</link>><br> <<else>> <span style="color: #888;">[ Luxury Designer Lingerie ($1,200) — Insufficient funds ]</span><br> <</if>> <<else>> <span style="color: #00ffaa;">✔ Luxury Designer Wardrobe (Lv. 2)</span><br> <</if>> /* 3. Chirurgie esthétique */ <<if _girl.surgery_done is true>> <span style="color: #00ffaa;">✔ Cosmetic Enhancement Surgery Complete</span><br> <<elseif $money >= 2500>> <<link "[ Underground Cosmetic Surgery ($2,500 -> +$40/day Base Income) ]">> <<set $money -= 2500>> <<set $basement_captives[$current_captive].surgery_done to true>> <<set $basement_captives[$current_captive].base_income += 40>> <<set $cell_log to "The underground surgeon enhanced " + _girl.name + "'s body (+$40/day base value).">> <<goto "Basement_Cell">> <</link>><br> <<else>> <span style="color: #888;">[ Cosmetic Surgery ($2,500) — Insufficient funds ]</span><br> <</if>> </div> <br>---<br> <<link "Leave the cell">> <<set $cell_log to "">> <<goto "Player_Basement">> <</link>> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/beach/beach.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>The Beach</h3> You step onto the sand of the city's public beach. The sound of the crashing waves and the smell of salt in the air offer a rare moment of peace away from the concrete jungle. <br><br> <strong>Available Actions:</strong><br><br> <<if $stamina < 30>> <span style="color: #ff4444;"><em>You are too exhausted to swim against the waves right now (Requires 30 Stamina).</em></span><br><br> <<else>> <<link "Go for a swim (Costs 30 Stamina, 1 hour)">> <<set _oldTime to $time>> <<set $stamina -= 30>> <<set $time += 60>> <<set $counters.swims += 1>> <<set $beach_log to "You dive into the cold water and swim against the tide. It's an exhausting but incredibly refreshing workout.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Beach">> <</if>> <</link>><br> <</if>> <<link "Relax on the warm sand (1 hour)">> <<set _oldTime to $time>> <<set $time += 60>> /* Restauration de 10 Stamina sans dépasser le maximum */ <<set $stamina += 10>> <<if $stamina > $maxstamina>><<set $stamina to $maxstamina>><</if>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> /* 20% de chance de déclencher l'événement de la fille nue */ <<if random(1, 100) <= 20>> <<goto "Beach_Encounter">> <<else>> <<set $beach_log to "You lie back on the warm sand, close your eyes, and listen to the waves. You feel a bit more rested. (Stamina +10)">> <<goto "Beach">> <</if>> <</if>> <</link>> /* Affichage du résultat de l'action */ <<if $beach_log isnot undefined>> <br> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00aaff;"> <<print $beach_log>> </div> <<set $beach_log to undefined>> <</if>> <br>---<br> <<link "Leave the beach">> <<goto "City_Hub">> <</link>>
<<randomImage "images/Sex/beach/TEASE/" 18>> <h3>A Secluded Spot</h3> As you walk down the shoreline looking for a quiet place to rest, you wander into a secluded cove hidden behind some large rocks. Lying on a towel in the sand is a beautiful woman, sunbathing completely naked. She thinks she is entirely alone and hasn't noticed you yet. <br><br> <<link "Approach and charm her (Charisma check)">> <<if random(1, 10) + $charisma >= 9>> <<set $counters.outside += 1>> <<set $sex_eth to "beach">><<set $sex_action to "TEASE">><<set $sex_log to "">><<goto "Sex_Main">> <<else>> /* Si l'échec doit annuler le gain de stamina, on le retire ici */ <<set $stamina -= 10>> <<set $beach_log to "<strong>Failure.</strong> You stumble over your words and come off as creepy. Startled and offended, she quickly covers herself up and threatens to call the cops. You are forced to quickly leave the area.">> <<goto "Beach">> <</if>> <</link>><br> <<link "Leave her alone and relax elsewhere">> <<set $beach_log to "You decide not to push your luck. You quietly back away and find another quiet spot to rest. (Stamina +10)">> <<goto "Beach">> <</link>>
<h3>The Red Lantern - Pick a Girl</h3> You hand over the cash. The bouncer steps aside, and the Madame gives a curt nod to the lounge. Three working girls put out their cigarettes and step forward from the dim red lighting, lining up for your inspection. They look you up and down with practiced smiles, waiting for your decision. --- <strong>Who do you want to take to the back room?</strong><br><br> <<link "Choose the Caucasian girl">> <<goto "Escort_White">> <</link>><br> <<link "Choose the Asian girl">> <<goto "Escort_Asian">> <</link>><br> <<link "Choose the Black girl">> <<goto "Escort_Black">> <</link>><br><br> --- <<link "Change your mind and walk away (Lose your money)">> <<set $brothel_log to "You shake your head and leave. The Madame pockets your cash with a smirk. No refunds in the Slums.">> <<goto $current_location>> <</link>>
<h3>The Madame's Office</h3> The Madame takes a drag from her cigarette and looks at you. "Alright, let's see what you've brought me. A broken girl is worth more to me. Less trouble, less screaming, gets to work faster." --- <strong>Select a captive to sell (This action is permanent):</strong><br><br> <<for _i to 0; _i < $basement_captives.length; _i++>> <<capture _i>> /* --- 1. Variables TEMPORAIRES uniquement pour l'affichage du lien --- */ <<set _girlDisplay to $basement_captives[_i]>> <<set _priceDisplay to 200 + (_girlDisplay.discipline * 15)>> /* --- 2. Création du lien avec l'index capturé (_i) --- */ <<link `"Sell " + _girlDisplay.name + " (Discipline: " + _girlDisplay.discipline + "%) - Payout: $" + _priceDisplay`>> /* --- 3. BLOC D'ACTION AUTONOME (S'exécute uniquement lors du clic) --- */ /* On recalcule la fille et le prix à l'instant T du clic pour cet index capturé */ <<set _clickGirl to $basement_captives[_i]>> <<set _clickPrice to 200 + (_clickGirl.discipline * 15)>> /* Transaction correcte */ <<set $money += _clickPrice>> <<addXP 20>> <<set $last_girl_sold_day to Math.floor($time / 1440)>> <<set $brothel_log to "You shook hands with the Madame and took the <strong>$" + _clickPrice + "</strong>. " + _clickGirl.name + " is quietly transferred from your cellar to the brothel's back rooms.">> /* On supprime la bonne fille de la mémoire du jeu */ <<run $basement_captives.deleteAt(_i)>> /* On retourne au hall du bordel */ <<goto "Slums_Brothel">> <</link>><br><br> <</capture>> <</for>> --- <<link "Change your mind and leave her office">> <<goto "Slums_Brothel">> <</link>>
<style> .chase-cabinet { max-width: 580px; margin: 10px auto; background: linear-gradient(180deg, #0d1017 0%, #07080c 100%); border: 2px solid #2a3242; border-radius: 12px; padding: 18px; box-shadow: 0 0 30px rgba(0, 0, 0, 0.9), 0 0 20px rgba(255, 0, 68, 0.15); text-align: center; font-family: 'Segoe UI', Tahoma, sans-serif; } .chase-siren-bar { height: 6px; border-radius: 4px; margin-bottom: 12px; background: linear-gradient(90deg, #ff1e42 0%, #ff1e42 45%, #1e6bff 55%, #1e6bff 100%); animation: policeSiren 0.45s infinite alternate; box-shadow: 0 0 12px rgba(255, 30, 66, 0.6); } @keyframes policeSiren { 0% { background: linear-gradient(90deg, #ff1e42 0%, #ff1e42 45%, #0b224f 55%, #0b224f 100%); box-shadow: -8px 0 16px rgba(255, 30, 66, 0.7); } 100% { background: linear-gradient(90deg, #4f0b18 0%, #4f0b18 45%, #1e6bff 55%, #1e6bff 100%); box-shadow: 8px 0 16px rgba(30, 107, 255, 0.7); } } .chase-hud-row { display: flex; justify-content: space-between; align-items: center; background: #121722; border: 1px solid #263044; border-radius: 8px; padding: 8px 14px; margin-bottom: 12px; font-size: 0.85em; color: #b0bdd0; } </style> <div class="chase-cabinet"> <div class="chase-siren-bar"></div> <h3 style="margin: 0 0 6px 0; color: #fff; text-transform: uppercase; letter-spacing: 1.5px;">🚨 High-Speed Police Pursuit</h3> <div style="color: #8c9bae; font-size: 0.88em; margin-bottom: 12px;"> Flashing interceptors are closing in! Use <strong>LEFT (◀)</strong> and <strong>RIGHT (▶)</strong> arrow keys to weave through highway traffic. </div> <div class="chase-hud-row"> <span>🚘 Vehicle: <strong style="color: #00e5ff;"><<print $active_vehicle || "Getaway Car">></strong></span> <span>⚡ Speed: <strong style="color: #ffaa00;"><<print $player_car_speed || 4>></strong> | 🎯 Handling: <strong style="color: #00ffaa;"><<print $player_car_handling || 1.0>></strong></span> </div> <canvas id="carCanvas" width="500" height="420" style="background-color: #14171d; border: 2px solid #354156; border-radius: 8px; box-shadow: inset 0 0 25px #000, 0 6px 18px rgba(0,0,0,0.8); display: block; margin: 0 auto;"></canvas> <h3 id="game-status" style="margin-top: 14px; min-height: 28px; font-size: 1.15em;"></h3> <div id="next-button" style="display: none; margin-top: 10px;"> <<link "Continue ➔">><<goto "Chase_Resolve">><</link>> </div> </div> <<done>> <<script>> /* --- RÉCUPÉRATION DES STATS DU JOUEUR --- */ let carSpeed = State.variables.player_car_speed || 4; let carHandling = State.variables.player_car_handling || 1.0; const canvas = document.getElementById("carCanvas"); const ctx = canvas.getContext("2d"); let animationId; /* --- CHARGEMENT DE L'IMAGE DU JOUEUR --- */ const playerImg = new Image(); const carImageMap = { "Rusty Wreck": "player", "Rusty Shitbox": "player", "Standard Sedan": "standard sedan", "Utility Van": "utility van", "Sports Car": "vyper", "Viper": "vyper", "Hypercar": "vyper", "Armored SUV": "armored_car" }; let activeCarKey = State.variables.active_vehicle; let activeCarFile = carImageMap[activeCarKey] || "player"; /* Cache-buster ?v=3 guarantees the cropped sprite loads */ playerImg.src = "images/Sex/car/" + activeCarFile + ".png?v=3"; playerImg.onerror = function() { playerImg.src = "images/Sex/car/player.png?v=3"; }; /* --- CHARGEMENT DES IMAGES DE TRAFIC ALÉATOIRES --- */ const enemySpecs = [ { path: "images/Sex/car/police.png?v=3", width: 38, height: 74 }, { path: "images/Sex/car/incomingsedan1.png?v=3", width: 38, height: 74 }, { path: "images/Sex/car/incomingsedan2.png?v=3", width: 38, height: 74 }, { path: "images/Sex/car/incomingsedan3.png?v=3", width: 38, height: 74 }, { path: "images/Sex/car/boxtruck.png?v=3", width: 46, height: 92 } ]; const loadedEnemies = enemySpecs.map(spec => { let img = new Image(); img.src = spec.path; return { img: img, width: spec.width, height: spec.height }; }); /* Dimensions adaptées au véhicule du joueur (plus large/long pour le camion/van) */ let isHeavyVehicle = (activeCarKey === "Utility Van" || activeCarKey === "Armored SUV"); let playerWidth = isHeavyVehicle ? 46 : 38; let playerHeight = isHeavyVehicle ? 90 : 74; /* Helper qui gère même une image non-rognée en cache en détectant si naturalWidth > 1000 */ function drawVehicleSprite(img, x, y, w, h) { if (img.complete && img.naturalWidth !== 0) { if (img.naturalWidth > 1500 && img.naturalHeight > 1000) { /* Fallback anti-cache si l'ancienne image 2816x1536 est encore en mémoire */ ctx.drawImage(img, 1170, 240, 476, 1050, x, y, w, h); } else { ctx.drawImage(img, x, y, w, h); } } else { ctx.fillStyle = "#00aaff"; ctx.fillRect(x, y, w, h); } } /* Variables du jeu */ let player = { lane: 2, y: 310, width: playerWidth, height: playerHeight }; let obstacles = []; let distance = 0; let targetDistance = random(1500, 5000); let isGameOver = false; let currentX = player.lane * 100 + (100 - player.width) / 2; let frameCount = 0; /* Fonction d'apparition des flics/trafic */ function spawnObstacle() { let lane = Math.floor(Math.random() * 5); let tooClose = obstacles.some(o => o.lane === lane && o.y < 65); if (!tooClose) { let chosen = loadedEnemies[Math.floor(Math.random() * loadedEnemies.length)]; obstacles.push({ lane: lane, y: -100, width: chosen.width, height: chosen.height, img: chosen.img }); } } /* Écouteur du clavier (Flèches gauche/droite) */ $(document).on('keydown.minigame', function(e) { if (!isGameOver) { if (e.key === "ArrowLeft" && player.lane > 0) { player.lane--; e.preventDefault(); } else if (e.key === "ArrowRight" && player.lane < 4) { player.lane++; e.preventDefault(); } } }); /* Nettoyage si le joueur quitte le passage violemment */ $(document).on(':passageend.minigame', function() { $(document).off('.minigame'); cancelAnimationFrame(animationId); }); /* --- BOUCLE PRINCIPALE DU JEU --- */ function gameLoop() { if (isGameOver) return; ctx.clearRect(0, 0, canvas.width, canvas.height); /* 0. Fond bitume et bandes d'arrêt d'urgence */ ctx.fillStyle = "#161920"; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = "#222733"; ctx.fillRect(0, 0, 8, canvas.height); ctx.fillRect(canvas.width - 8, 0, 8, canvas.height); /* Reflet gyrophare subtil en bas de l'écran */ let sirenAlpha = 0.08 + Math.abs(Math.sin(frameCount * 0.12)) * 0.08; ctx.fillStyle = (Math.floor(frameCount / 15) % 2 === 0) ? "rgba(255, 30, 66, " + sirenAlpha + ")" : "rgba(30, 107, 255, " + sirenAlpha + ")"; ctx.fillRect(0, canvas.height - 90, canvas.width, 90); /* 1. Animation de la route (lignes pointillées) */ ctx.strokeStyle = "#4a5568"; ctx.lineWidth = 4; ctx.setLineDash([24, 24]); ctx.lineDashOffset = -frameCount * carSpeed; ctx.beginPath(); for (let i = 1; i < 5; i++) { ctx.moveTo(i * 100, 0); ctx.lineTo(i * 100, canvas.height); } ctx.stroke(); ctx.setLineDash([]); /* 2. Mouvement fluide de la voiture (centrée dans sa voie de 100px) */ let targetX = player.lane * 100 + (100 - player.width) / 2; currentX += (targetX - currentX) * (0.15 * carHandling); /* 3. Dessin du Joueur */ drawVehicleSprite(playerImg, currentX, player.y, player.width, player.height); /* 4. Gestion et dessin des obstacles */ for (let i = 0; i < obstacles.length; i++) { let obs = obstacles[i]; obs.y += carSpeed; let obsX = obs.lane * 100 + (100 - obs.width) / 2; drawVehicleSprite(obs.img, obsX, obs.y, obs.width, obs.height); /* Vérification des collisions (hitbox légèrement indulgente de 6px) */ if (obs.y + obs.height > player.y + 6 && obs.y < player.y + player.height - 6) { if (currentX < obsX + obs.width - 6 && currentX + player.width - 6 > obsX) { endGame("crash"); } } } /* 5. Nettoyage des obstacles passés et spawn des nouveaux */ obstacles = obstacles.filter(o => o.y < 460); let spawnRate = 0.025 + (distance / 40000); if (Math.random() < spawnRate) spawnObstacle(); /* 6. Mise à jour de la distance et barre de progression HUD */ distance += carSpeed; frameCount++; let pct = Math.min(100, Math.floor((distance / targetDistance) * 100)); ctx.fillStyle = "rgba(10, 14, 20, 0.85)"; ctx.fillRect(12, 10, 476, 28); ctx.strokeStyle = "#334155"; ctx.lineWidth = 1; ctx.strokeRect(12, 10, 476, 28); ctx.fillStyle = "#00e5ff"; ctx.fillRect(14, 12, (472 * pct) / 100, 24); ctx.fillStyle = "#ffffff"; ctx.font = "bold 13px 'Segoe UI', Arial"; ctx.fillText("ESCAPE PROGRESS: " + pct + "%", 24, 27); if (distance >= targetDistance) { endGame("escape"); } else { animationId = requestAnimationFrame(gameLoop); } } /* --- FIN DU JEU --- */ function endGame(result) { isGameOver = true; cancelAnimationFrame(animationId); $(document).off('.minigame'); State.variables.chase_result = result; let statusText = document.getElementById("game-status"); let nextBtn = document.getElementById("next-button"); if (result === "crash") { statusText.innerHTML = "<span style='color:#ff4444; font-weight:800;'>💥 WRECKED! Police interceptors boxed you in!</span>"; } else { statusText.innerHTML = "<span style='color:#00ffaa; font-weight:800;'>🏁 ESCAPED! You vanished into the industrial backstreets.</span>"; } nextBtn.style.display = "block"; } /* Lancement */ gameLoop(); <</script>> <</done>>
<h3>Busted</h3> <<addHeat 6>> You fumbled the wires. The car's security system engages, blaring a deafening alarm across the street. <<if $hotwire_context is "darkweb">> /* --- ÉCHEC DARK WEB --- */ <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img src="images/combat/19.jpg" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> </div> The target's private security rushes out of a nearby building, pulling their weapons! <<set $enemy to { name: "Armed Security", hp: 40, max_hp: 40, strength: 4, img: "images/combat/fighter" + random(1, 4) + ".jpg" }>> <<set _loc to $location_attempt>> <<set $active_job to null>> <br><br> <<link "Defend yourself">> <<set $current_location to _loc>> <<goto "Combat_Main">> <</link>> <<else>> /* --- ÉCHEC VOL LIBRE --- */ <<set _ownerImg to "images/combat/jealous" + random(1, 8) + ".jpg">> <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img @src="_ownerImg" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> </div> A furious owner runs out of a nearby building wielding a blunt weapon! <<set $time += 15>> <<set $enemy to { name: "Furious Owner", hp: 35, max_hp: 35, strength: 3, img: _ownerImg }>> <br><br> <<link "Defend yourself">> <<set $current_location to "Action_CarTheft">> <<goto "Combat_Main">> <</link>> <</if>>
<h3>Engine Started</h3> <<addHeat 4>> The engine roars to life. You slam the door shut and speed off into the night before anyone notices. <<if $hotwire_context is "darkweb">> /* --- RÉSOLUTION DARK WEB --- */ <<set $money += $hotwire_reward>> <<if $counters.shadowboard_quests is undefined>><<set $counters.shadowboard_quests to 0>><</if>> <<set $counters.shadowboard_quests += 1>> <<addXP 25>> <<set $time += 60>> <strong>Success:</strong> You dropped the requested vehicle off at the client's chop shop without a scratch. The crypto payout of <strong>$<<print $hotwire_reward>></strong> is transferred instantly. <br><br> <<set _loc to $location_attempt>> <<set $active_job to null>> /* On efface le contrat */ <<link "Disappear into the streets">> <<goto _loc>> <</link>> <<else>> /* --- RÉSOLUTION VOL LIBRE (GARAGE) --- */ <<set $time += 60>> <<run $stolen_vehicles.push($stolen_car_candidate)>> <<addXP 25>> <br><br> <<link "Drive the vehicle back to your garage">> <<goto "Action_CarTheft">> <</link>> <</if>>
<h3>Neon Casino - The Bar</h3> You lean against the sticky counter of the casino's central bar. A bartender in a slightly stained vest gives you a nod, waiting for your order. <strong>Your Wallet:</strong> $ $money --- <<if $bar_result isnot "">> $bar_result <br>---<br> <</if>> <strong>Drinks Menu (Takes 15 minutes):</strong><br><br> <<if $money >= 15>> <<link "Order a Draft Beer ($15)">> <<set $money -= 15>> <<set $drunk_units += 1>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>You sip a cold draft beer. It's mostly water and foam, but it washes the dust out of your throat.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money >= 30>> <<link "Order a Whiskey on the rocks ($30)">> <<set $money -= 30>> <<set $drunk_units += 3>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>You down a glass of cheap, burning whiskey. It hits the back of your throat like sandpaper, but it warms your stomach.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money >= 50>> <<link "Order a Neon Cocktail ($50)">> <<set $money -= 50>> <<set $drunk_units += 2>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>The bartender slides you a glowing, overly sweet cocktail with an umbrella. It tastes like pure sugar and chemicals, but you feel slightly fancier.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money < 15>> //You don't have enough money to buy anything here. The bartender glares at you.//<br> <</if>> <strong>Social:</strong><br><br> <<if $money >= 15>> <<link "Buy a drink for a stranger and flirt ($15 - Takes 1 hour)">> <<set $money -= 15>> <<set _oldTime to $time>> <<set $time += 60>> <<set $counters.total_alcohol_drank += 1>> <<set $drunk_units += 1>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Casino_Flirt">> <</if>> <</link>><br><br> <</if>> <br><br> <<link "Back to Casino Floor">> <<set $bar_result to "">> <<goto "Neon_Casino">> <</link>>
<h3>Neon Casino - The Bar</h3> You spot an attractive stranger nursing a drink. You slide next to them, buy them a refill, and start turning on the charm. /* Jet de Charisme (1 à 10) */ <<if $charisma >= random(1, 10)>> They laugh at your jokes and lean in closer. The chemistry is undeniable. After a few drinks, they whisper in your ear: "It's too loud here. Let's go to my room." <br><br> <<link "Follow them to the Neon Hotel">><<goto "Neon_Hotel_Room">><</link>> <<else>> They politely accept the free drink, but conversation quickly dies out. After a few awkward minutes of you trying to keep the spark alive, they excuse themselves to "go find their friends" and never return. <br><br> <<link "Order another drink in defeat">><<goto "Casino_Bar">><</link>> <</if>>
<h3>Neon Casino - Mahjong Table</h3> You confidently sit down at a table with four local veterans. Tiles with bizarre, incomprehensible symbols are shuffled, stacked into complex walls, and discarded at a blinding, hypnotic speed. Someone yells "Pong!". Another shouts "Chow!". You blindly pick a tile and discard it at random. The entire table stops and glares at you with absolute contempt and fury. You have absolutely no idea what the rules are, how the scoring works, or what is happening. All you know is that your chips are gone. /* Calcul de la perte et sécurisation du plancher à 0 */ <<set _oldMoney to $money>> <<set $money to Math.max(0, $money - 200)>> <<set _lostAmount to _oldMoney - $money>> /* Avancement du temps (30 minutes de confusion intense) */ <<set _oldTime to $time>> <<set $time += 30>> --- <strong>Result:</strong> You understood nothing and lost <strong>$ _lostAmount</strong>. --- <br><br> /* Vérification du franchissement de 4h00 du matin */ <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<link "Get up from the table and walk away in shame">><<goto "Neon_Casino">><</link>> <</if>>
<h3>🎰 Neon Casino — Cyber-Slots 777</h3> <<nobr>> <style> @keyframes neonMarquee { 0%, 100% { box-shadow: 0 0 12px #ff00aa, inset 0 0 12px #ff00aa; border-color: #ff55cc; } 50% { box-shadow: 0 0 22px #00ffff, inset 0 0 16px #00ffff; border-color: #00ffff; } } @keyframes jackpotFlash { 0%, 100% { box-shadow: 0 0 30px #ffd700, 0 0 60px #ff0055, inset 0 0 25px #ffd700; border-color: #ffd700; transform: scale(1); } 25% { box-shadow: 0 0 45px #00ffcc, 0 0 80px #ffd700, inset 0 0 35px #00ffcc; border-color: #ffffff; transform: scale(1.015); } 50% { box-shadow: 0 0 40px #ff00aa, 0 0 70px #ffd700, inset 0 0 30px #ff00aa; border-color: #ffaa00; transform: scale(1); } 75% { box-shadow: 0 0 50px #ffd700, 0 0 90px #00ffff, inset 0 0 35px #ffd700; border-color: #ffffff; transform: scale(1.015); } } @keyframes reelSpinStrip { 0% { transform: translateY(0); filter: blur(2px); } 100% { transform: translateY(-83.33%); filter: blur(2px); } } @keyframes reelHideSpin { 0%, 95% { opacity: 1; } 100% { opacity: 0; visibility: hidden; } } @keyframes reelLandBounce { 0%, 85% { opacity: 0; transform: translateY(-45px) scale(0.7); } 93% { opacity: 1; transform: translateY(8px) scale(1.15); } 100% { opacity: 1; transform: translateY(0) scale(1); } } @keyframes resultReveal { 0%, 88% { opacity: 0; transform: translateY(12px) scale(0.9); } 95% { opacity: 1; transform: translateY(-3px) scale(1.04); } 100% { opacity: 1; transform: translateY(0) scale(1); } } @keyframes bulbBlink { 0%, 100% { opacity: 1; transform: scale(1.1); } 50% { opacity: 0.3; transform: scale(0.85); } } .slot-cabinet { background: radial-gradient(circle at center, #1f102b 0%, #0b0711 100%); border: 3px solid #ff00aa; border-radius: 14px; padding: 20px; max-width: 520px; margin: 15px auto 25px auto; text-align: center; animation: neonMarquee 3s infinite ease-in-out; position: relative; } .slot-cabinet.win-jackpot { animation: jackpotFlash 0.8s infinite ease-in-out; } .slot-cabinet.win-big { box-shadow: 0 0 28px #00ffaa, inset 0 0 18px #00ffaa; border-color: #00ffaa; } .slot-bulbs { display: flex; justify-content: space-around; margin-bottom: 12px; } .slot-bulb { width: 10px; height: 10px; border-radius: 50%; background: #ffd700; box-shadow: 0 0 8px #ffd700; animation: bulbBlink 0.9s infinite; } .slot-bulb:nth-child(even) { background: #00ffff; box-shadow: 0 0 8px #00ffff; animation-delay: 0.45s; } .slot-reels-row { display: flex; justify-content: center; gap: 14px; background: #07050a; border: 2px solid #444; border-radius: 10px; padding: 16px; box-shadow: inset 0 6px 18px rgba(0,0,0,0.95); margin-bottom: 16px; } .slot-reel-window { width: 105px; height: 105px; background: linear-gradient(180deg, #12121a 0%, #241d30 50%, #12121a 100%); border: 2px solid #555; border-radius: 8px; position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; box-shadow: inset 0 0 14px rgba(0,0,0,0.9); } .slot-reel-window.win-glow { border-color: #ffd700; box-shadow: 0 0 16px #ffd700, inset 0 0 12px rgba(255, 215, 0, 0.35); } .slot-spin-strip { position: absolute; top: 0; left: 0; width: 100%; display: flex; flex-direction: column; align-items: center; font-size: 3.1em; line-height: 105px; } .slot-final-symbol { font-size: 3.3em; line-height: 1; z-index: 2; } </style> <<if $slot_r1 is undefined>> <<set $slot_r1 to "7️⃣">> <<set $slot_r2 to "💎">> <<set $slot_r3 to "🍒">> <<set $slot_spinning to false>> <<set $slot_win_tier to "none">> <</if>> <div style="display: flex; justify-content: space-between; align-items: center; background-color: #15151e; border: 1px solid #333; padding: 10px 15px; border-radius: 6px; margin-bottom: 15px;"> <div><strong>Your Wallet:</strong> <span style="color: #00ffaa; font-size: 1.1em;">$<<print $money>></span></div> <div style="font-size: 0.8em; color: #aaa;"> <span style="color: #ffd700;">7️⃣7️⃣7️⃣ = <strong>100x</strong></span> | <span style="color: #ff55cc;">3x Match = <strong>15x</strong></span> | <span style="color: #00ffff;">2x Match = <strong>1.5x</strong></span> </div> </div> <<set _cabClass to "slot-cabinet" + ($slot_win_tier is "jackpot" ? " win-jackpot" : ($slot_win_tier is "triple" ? " win-big" : ""))>> <<set _reelGlow to ($slot_win_tier isnot "none" and $slot_win_tier isnot "lose" ? " win-glow" : "")>> <div @class="_cabClass"> <div class="slot-bulbs"> <div class="slot-bulb"></div><div class="slot-bulb"></div><div class="slot-bulb"></div><div class="slot-bulb"></div> <div class="slot-bulb"></div><div class="slot-bulb"></div><div class="slot-bulb"></div><div class="slot-bulb"></div> <div class="slot-bulb"></div><div class="slot-bulb"></div> </div> <div style="font-family: 'Courier New', monospace; font-weight: bold; letter-spacing: 3px; color: #ffd700; text-shadow: 0 0 10px #ff00aa; font-size: 1.15em; margin-bottom: 12px;"> ⚡ NEON FORTUNE 777 ⚡ </div> <div class="slot-reels-row"> <!-- REEL 1 --> <div @class="'slot-reel-window' + _reelGlow"> <<if $slot_spinning is true>> <div class="slot-spin-strip" style="animation: reelSpinStrip 0.18s linear infinite, reelHideSpin 0.65s forwards;"> <div>🍒</div><div>💎</div><div>🍋</div><div>7️⃣</div><div>🔔</div><div>🍒</div> </div> <div class="slot-final-symbol" style="animation: reelLandBounce 0.72s ease-out forwards;"><<print $slot_r1>></div> <<else>> <div class="slot-final-symbol"><<print $slot_r1>></div> <</if>> </div> <!-- REEL 2 --> <div @class="'slot-reel-window' + _reelGlow"> <<if $slot_spinning is true>> <div class="slot-spin-strip" style="animation: reelSpinStrip 0.16s linear infinite, reelHideSpin 1.15s forwards;"> <div>💎</div><div>7️⃣</div><div>🍒</div><div>🔔</div><div>🍋</div><div>💎</div> </div> <div class="slot-final-symbol" style="animation: reelLandBounce 1.22s ease-out forwards;"><<print $slot_r2>></div> <<else>> <div class="slot-final-symbol"><<print $slot_r2>></div> <</if>> </div> <!-- REEL 3 --> <div @class="'slot-reel-window' + _reelGlow"> <<if $slot_spinning is true>> <div class="slot-spin-strip" style="animation: reelSpinStrip 0.14s linear infinite, reelHideSpin 1.65s forwards;"> <div>7️⃣</div><div>🔔</div><div>💎</div><div>🍒</div><div>🍋</div><div>7️⃣</div> </div> <div class="slot-final-symbol" style="animation: reelLandBounce 1.72s ease-out forwards;"><<print $slot_r3>></div> <<else>> <div class="slot-final-symbol"><<print $slot_r3>></div> <</if>> </div> </div> <<if $slot_result isnot "">> <div style="min-height: 48px; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,0.65); border: 1px solid #333; border-radius: 6px; padding: 10px; animation: resultReveal 1.85s ease forwards;"> <div>$slot_result</div> </div> <<else>> <div style="min-height: 48px; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,0.45); border: 1px solid #282828; border-radius: 6px; padding: 10px; color: #888; font-style: italic;"> Insert credits and pull the lever to spin the reels... </div> <</if>> </div> <div style="text-align: center;"> <strong>Select Your Bet (Takes 5 minutes):</strong><br><br> <<set _bets to [1, 5, 10, 25, 50, 100]>> <<set _canBet to false>> <<for _i to 0; _i < _bets.length; _i++>> <<set _betAmount to _bets[_i]>> <<if $money >= _betAmount>> <<set _canBet to true>> <<capture _betAmount>> <span style="display: inline-block; margin: 4px;"> <<button `"🎰 Spin $" + _betAmount`>> <<set $money -= _betAmount>> <<set _oldTime to $time>> <<set $time += 5>> <<set _symbols to ["🍒", "🍋", "🔔", "💎", "7️⃣"]>> <<set $slot_r1 to _symbols[random(0, 4)]>> <<set $slot_r2 to _symbols[random(0, 4)]>> <<set $slot_r3 to _symbols[random(0, 4)]>> <<set $slot_spinning to true>> <<if $slot_r1 is $slot_r2 and $slot_r2 is $slot_r3>> <<if $slot_r1 is "7️⃣">> <<set _winnings to _betAmount * 100>> <<set $money += _winnings>> <<set $slot_win_tier to "jackpot">> <<set $slot_result to "<span style='color: #ffd700; font-size: 1.2em; font-weight: bold;'>🚨 GRAND JACKPOT! TRIPLE SEVENS! 🚨</span><br><span style='color: #00ffaa;'>Sirens blare as the machine pays out <strong>+$" + _winnings + "</strong> (x100)!</span>">> <<else>> <<set _winnings to _betAmount * 15>> <<set $money += _winnings>> <<set $slot_win_tier to "triple">> <<set $slot_result to "<span style='color: #ff55cc; font-size: 1.1em; font-weight: bold;'>✨ THREE OF A KIND (" + $slot_r1 + $slot_r2 + $slot_r3 + ")! ✨</span><br><span style='color: #00ffaa;'>You won <strong>+$" + _winnings + "</strong> (x15)!</span>">> <</if>> <<elseif $slot_r1 is $slot_r2 or $slot_r2 is $slot_r3 or $slot_r1 is $slot_r3>> <<set _winnings to Math.ceil(_betAmount * 1.5)>> <<set $money += _winnings>> <<set $slot_win_tier to "pair">> <<set $slot_result to "<span style='color: #00ffff; font-weight: bold;'>Two of a Kind!</span> — Payout: <strong style='color: #00ffaa;'>+$" + _winnings + "</strong>">> <<else>> <<set $slot_win_tier to "lose">> <<set $slot_result to "<span style='color: #888;'>No match (-$" + _betAmount + "). Pull again!</span>">> <</if>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Casino_Slots">> <</if>> <</button>> </span> <</capture>> <</if>> <</for>> <<if _canBet is false>> <span style="color: #ff4444;"><em>You don't have enough cash to play this machine.</em></span> <</if>> </div> <br><hr style="border-color: #444;"> <<link "Step away from the machine and return to Casino Floor">> <<set $slot_result to "">> <<set $slot_spinning to false>> <<set $slot_win_tier to "none">> <<goto "Neon_Casino">> <</link>> <</nobr>>
<h3>Chase Aftermath</h3> <<nobr>> <<if $chase_result is "escape">> <div style="padding: 15px; border-left: 3px solid #00ffaa; background-color: #111;"> You drift into an abandoned garage and kill the engine. The blaring sirens fly past your hiding spot and fade into the distance. <br><br> Your vehicle saved you tonight. You wipe the sweat from your forehead, wait a few hours, and quietly drive back to your hideout. <br><br> <<run $morning_notifications.push("<span style='color: #00ffaa;'><strong>Evasion:</strong> You successfully outran the police in a high-speed chase.</span>")>> <<addXP 50>> </div> <br><br> <<link "Return home">><<goto "Home">><</link>> <<elseif $chase_result is "crash">> <div style="padding: 15px; border-left: 3px solid #ff4444; background-color: #111;"> <div style="text-align: center; margin-bottom: 15px;"> <img src="images/Sex/Police/caught/1.webp" style="max-width: 100%; max-height: 240px; border-radius: 3px;"> </div> You miscalculated the turn. You slam the brakes, but the car spins out of control and crashes into a barricade. Airbags deploy, leaving you stunned and disoriented. <br><br> Before you can even unbuckle your seatbelt, half a dozen cops have their guns drawn on your windshield. <em>"Get out of the car with your hands up!"</em> <br><br> <<set _bail to $rep_level * 2000>> <<if $heat >= 50>> <span style="color: #ff4444;"><strong>MOST WANTED ARREST:</strong> Because your Heat is at <<print $heat>>%, the judge denies standard street bail! You are being transferred directly to State Penitentiary intake!</span> <br><br> <<link "Get thrown into the paddy wagon">><<goto "Prison_Intake">><</link>> <<elseif $money >= _bail>> <strong>Consequences:</strong><br> Your Heat is low enough to qualify for immediate precinct bail ($<<print _bail>>), or you can refuse to pay and face prison intake.<br><br> <<link `"[ Pay Precinct Bail (-$" + _bail + ") & Return Home ]"`>> <<set $money -= _bail>> <<goto "Home">> <</link>><br><br> <<link "[ Refuse Bail -> Go to Prison Intake ]">> <<goto "Prison_Intake">> <</link>> <<else>> <span style="color: #ff4444;"><strong>INSUFFICIENT FUNDS FOR BAIL ($<<print _bail>> required):</strong> You cannot afford bail! You are handcuffed and transported to State Penitentiary intake.</span> <br><br> <<link "Get thrown into the paddy wagon">><<goto "Prison_Intake">><</link>> <</if>> </div> <</if>> <</nobr>>
<h3>Dishonest Daniel's Chop Shop</h3> The mechanic smokes a cigarette, looking over your garage inventory amidst sparks from an angle grinder. <<nobr>> <br><br> <strong>Your Wallet:</strong> $<<print $money>> | <strong>Weekly Manual Scraps:</strong> $chop_shop_sales_this_week / <<print ($chop_shop_owned ? 5 : 2)>> <br><br> /* --- PROPRIÉTÉ DE FACTION : CHOP SHOP AUTOMATISÉ --- */ <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #ffaa00; margin-bottom: 20px;"> <h4>🔧 Syndicate Chop Shop Operation</h4> <<if $chop_shop_owned is false>> Buy into Daniel's operation to unlock passive daily vehicle theft & stripping revenue, increase weekly manual sales limits to 5, and allow dismantling luxury sports cars on-site.<br><br> <strong>Buy-in Cost:</strong> $12,000<br><br> <<if $money >= 12000>> <<link "[ Buy Partnership in the Chop Shop ($12,000) ]">> <<set $money -= 12000>> <<set $chop_shop_owned to true>> <<set $chop_shop_level to 1>> <<goto "Chop_Shop">> <</link>> <<else>> <span style="color: #888;">[ Insufficient funds ($12,000 required) ]</span> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[ Owned - Level <<print $chop_shop_level>> Operation ]</strong></span><br> Passive Daily Income: <strong>$<<print ($chop_shop_level * 250)>>/day</strong> (+$300/day if a <strong>Driver</strong> or <strong>Smuggler</strong> is in your gang, plus automatic nightly stripping of stolen cars in your garage).<br><br> <<if $chop_shop_level < 3>> <<set _upgCost to $chop_shop_level * 15000>> <<if $money >= _upgCost>> <<link `"[ Upgrade Hydraulic Lifts & Forgery Bay ($" + _upgCost + ") ]"`>> <<set $money -= _upgCost>> <<set $chop_shop_level += 1>> <<goto "Chop_Shop">> <</link>> <<else>> <span style="color: #888;">[ Upgrade to Level <<print $chop_shop_level + 1>> costs $<<print _upgCost>> ]</span> <</if>> <<else>> <span style="color: #00aaff;"><em>Maximum Chop Shop level reached.</em></span> <</if>> <</if>> </div> <<if $has_hotwire_kit is false>> <strong>Tools for sale:</strong><br> <<if $money >= 500>> <<link "Buy Professional Hotwire Kit ($500)">> <<set $money -= 500>> <<set $has_hotwire_kit to true>> <<goto "Chop_Shop">> <</link>> <<else>> <span style="color: #888;">Buy Professional Hotwire Kit ($500) - Not enough money</span> <</if>> <br><br> ---<br> <</if>> <strong>Select a stolen vehicle to scrap:</strong><br><br> <<set _maxSales to ($chop_shop_owned ? 5 : 2)>> <<if $stolen_vehicles.length is 0>> <em>You don't have any stolen vehicles in your garage.</em><br><br> <<else>> <<for _i to 0; _i < $stolen_vehicles.length; _i++>> <<set _car to $stolen_vehicles[_i]>> <<capture _i, _car>> <div style="margin-bottom: 8px; background-color: #111; padding: 8px; border-left: 3px solid #555;"> <strong><<print _car>></strong> — <<if (_car is "Sports Car" or _car is "Hypercar") and $chop_shop_owned is false>> <span style="color: #ff4444; font-style: italic;">[TOO HOT - Buy Chop Shop Partnership or sell via Cartel]</span> <<else>> <<if $chop_shop_sales_this_week >= _maxSales>> <span style="color: #888; font-style: italic;">[Chop shop limit reached for this week]</span> <<else>> <<set _price to 250>> <<if _car is "SUV">><<set _price to 400>><</if>> <<if _car is "Van">><<set _price to 450>><</if>> <<if _car is "Sports Car">><<set _price to 1200>><</if>> <<if _car is "Hypercar">><<set _price to 1800>><</if>> <<set _price to Math.floor(_price * (1 + ($chop_shop_owned ? ($chop_shop_level * 0.2) : 0)))>> <<link `"[ Strip & Sell for $" + _price + " ]"`>> <<set $chop_shop_sales_this_week += 1>> <<run $stolen_vehicles.deleteAt(_i)>> <<set $money += _price>> <<addXP 15>> <<goto "Chop_Shop">> <</link>> <</if>> <</if>> </div> <</capture>> <</for>> <</if>> <br>---<br> <<link "Return to Streets">> <<if $current_location is "Slums">> <<goto "Slums">> <<else>> <<goto "Outskirts">> <</if>> <</link>> <</nobr>>
You are in the streets of <strong>$city</strong>. Time is passing. <<if $war_state isnot undefined and $war_state.active is true>> <br><span style="color: #ff4444;"><strong>⚠️ TURF WAR ACTIVE:</strong> Enemy hit squads from <strong><<print $factions[$war_state.target_district].name>></strong> are prowling the streets!</span> <</if>> <div id="map-container"> <div class="district-label" id="label-slums"> [[The Slums|Travel_Handler][$destination to "Slums"]] </div> <div class="district-label" id="label-financial"> [[Financial District|Travel_Handler][$destination to "Financial"]] </div> <div class="district-label" id="label-neon"> [[Neon Strip|Travel_Handler][$destination to "Neon"]] </div> <div class="district-label" id="label-projects"> [[The Projects|Travel_Handler][$destination to "Projects"]] </div> <div class="district-label" id="label-port"> [[The Port|Travel_Handler][$destination to "Port"]] </div> <div class="district-label" id="label-outskirts"> [[The Outskirts|Travel_Handler][$destination to "Outskirts"]] </div> </div>
<h3>The Dancefloor</h3> You push your way into the writhing crowd, moving with the bass and keeping an eye out for opportunities. <<set _rng to random(1, 100)>> <<if _rng <= 40>> <br><br> You dance for a while, but the crowd is mostly closed-off groups tonight. You get a good workout, but no numbers. <br><br> <<link "Back to the bar">><<goto "Club_Normal_Floor">><</link>> <<else>> <br><br> <<randomImage "images/Sex/club/clubfight/clubtaken" 8 0 "#00aaff">> Through the strobes, you lock eyes with a stunning woman. She bites her lip and grinds closer to you. You wrap an arm around her waist, and she doesn't resist. <br><br> <<set _bfRng to random(1, 100)>> <<if _bfRng <= 50>> <<randomImage "images/combat/clubattack" 2 1 "#00aaff">> Suddenly, a heavy hand shoves your shoulder hard. "Hey! That's my girl, you piece of shit!" a muscular guy yells over the music, squaring up to you with clenched fists. <br><br> <<link "Fight him for her">> <<set $enemy to { name: "Angry Boyfriend", hp: 35, max_hp: 35, strength: 5 }>> <<set $combat_return_victory to "Club_Hookup">> <<set $combat_return_defeat to "Location_NeonClub">> <<set $combat_log to "You step up, ready to teach him a lesson.">> <<goto "Combat_Main">> <</link>><br> <<link "Put your hands up and walk away (Lose 10 Stamina in shame)">> <<set $stamina -= 10>> <<goto "Club_Normal_Floor">> <</link>> <<else>> She smiles, wrapping her arms around your neck. "It's too crowded here," she whispers. "Take me to the bathroom." <br><br> <<link "Lead the way">><<goto "Club_Hookup">><</link>> <</if>> <</if>>
<h3>Club Bathroom</h3> You drag her into a handicap stall and lock the heavy door behind you. The bass is muffled here, replaced by the sound of her heavy breathing as she pulls your pants down. <br><br> <<randomImage "images/Sex/club/wc/bj/" 8 0 "#00aaff">> <br><br> She drops to her knees on the sticky tile without hesitation. The cramped space forces you back against the graffiti-covered metal partition as she goes to work. After a few minutes of eager head, you grab her by the hips and pull her up, pressing her back against the vibrating stall door to finish what she started. <br><br> <<randomImage "images/Sex/club/wc/sex/" 31 0 "#00aaff">> <br><br> After a quick and intense session, you both fix your clothes. She gives you a wink before slipping back out into the crowd. <br><br> <<link "Wash your hands and leave">><<goto "Club_Normal_Floor">><</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/club/down/nc-highpop.webp" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Club Apex - Main Floor</h3> The main floor is a chaotic sea of grinding bodies, spilled drinks, and flashing strobes. In the center, a dancer works the main pole for tips. <strong>Your Wallet:</strong> $<<print $money>> | <strong>Stamina:</strong> <<print $stamina>> <hr style="border-color: #444;"> <<if $bar_result isnot "">> <span style="color: #00ffaa;">$bar_result</span> <br><hr style="border-color: #444;"> <</if>> <strong>The Bar:</strong><br> <<if $money >= 15>> <<link "Order a Neon Cocktail ($15)">> <<set $money -= 15>> <<set $stamina to Math.min($stamina + 15, $maxstamina)>> <<set $drunk_units += 2>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>You down the glowing blue drink. It's mostly sugar and vodka.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money >= 30>> <<link "Order Top Shelf Whiskey ($30)">> <<set $money -= 30>> <<set $stamina to Math.min($stamina + 25, $maxstamina)>> <<set $drunk_units += 3>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>Smooth and dangerous. Just what you needed.</em>">> <<processAlcohol>> <</link>><br> <</if>> <br> <strong>Activities:</strong><br> <<link "Watch the public pole dancers (Takes 30 mins)">> <<set $bar_result to "">> <<set $time += 30>> <<goto "Club_Public_Pole">> <</link>><br> <<if $stamina >= 10>> <<link "Hit the dancefloor to scout for women (Costs 10 Stamina)">> <<set $bar_result to "">> <<set $stamina -= 10>> <<goto "Club_Dancefloor">> <</link>> <<else>> <span style="color: #555;"><em>You are too exhausted to dance.</em></span> <</if>> <br><br> <<link "Back to Entrance">><<set $bar_result to "">><<goto "Location_NeonClub">><</link>>
<h3>Main Stage</h3> You spend half an hour leaning against a pillar, watching the girls work the public pole. It's standard club routine—flashy, teasing, but strictly no-touch. <br><br> <<randomImage "images/Sex/club/down/pole/" 15 0 "#00aaff">> <br><br> <<if $money >= 200>> <<link "Request a Private Dance ($200)">> <<set $money -= 200>> <<goto "Club_VIP_Lap">> <</link>> <<else>> <span style="color: #555;">Private Dance ($200) - Insufficient Funds</span> <</if>> <<link "Head back">><<goto "Club_Normal_Floor">><</link>>
<div style="border: 2px solid #333; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;"> <img src="images/Sex/club/up/viparea.png" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Club Apex - VIP Lounge</h3> The music is just as loud, but the air up here is different. Expensive cigars, spilled champagne, and dangerous men. <<nobr>> <strong>Your Wallet:</strong> $<<print $money>> <br><hr style="border-color: #444;"><br> /* --- DAILY VIP DANCER & SETUP --- */ <<if setup.vip_dancers is undefined or setup.vip_dancers[1].isDuo is undefined>> <<initVipDancerData>> <</if>> <<if $daily_vip_dancer is undefined>> <<set $daily_vip_dancer to random(1, 10)>> <</if>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #ff4444; margin-bottom: 20px; border-radius: 4px;"> <h4 style="color: #ff4444; margin-top: 0;">VIP Stage & Private Suites</h4> <div style="display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-start; margin-bottom: 12px;"> <div style="flex: 1; min-width: 280px; max-width: 520px; text-align: center; background-color: #0b0b0b; padding: 6px; border-radius: 4px; border: 1px solid #ff4444; box-shadow: 0 0 10px rgba(255, 68, 68, 0.2);"> <video autoplay loop muted playsinline style="width: 100%; height: auto; max-height: 480px; border-radius: 3px; display: block; object-fit: contain;"> <source @src="'images/Sex/club/up/strip/' + $daily_vip_dancer + '/girl' + $daily_vip_dancer + '.mp4'" type="video/mp4"> </video> </div> <div style="flex: 1; min-width: 260px;"> <<if $daily_vip_dancer is 1>> <p><strong>Tonight's Featured Performers:</strong> <span style="color: #ff4444; font-size: 1.1em; font-weight: bold;"><<print setup.vip_dancers[$daily_vip_dancer].name>></span> (Exclusive Duo — Dancer #1)</p> <p style="color: #ccc; font-size: 0.95em;">A special treat has taken over the main VIP stage tonight: an irresistible duo act! <strong><<print setup.vip_dancers[$daily_vip_dancer].name>></strong> command the spotlight together, trading seductive glances and slowly moving against each other in tantalizing unison under the warm crimson spotlights.</p> <p style="color: #aaa; font-size: 0.9em; margin-bottom: 14px;">The velvet-lined private rooms in the back are reserved exclusively for private three-way sessions with tonight's duo.</p> <<if $money >= 2000>> <<link "Request a Private Dance with the Duo (" + setup.vip_dancers[$daily_vip_dancer].name + ") ($2000)">> <<set $money -= 2000>> <<set $vip_private_dancer to $daily_vip_dancer>> <<set $vip_private_stage to "strip">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<else>> <span style="color: #666;">Private Dance with <<print setup.vip_dancers[$daily_vip_dancer].name>> ($2000) - Insufficient Funds</span> <</if>> <<else>> <p><strong>Tonight's Featured Performer:</strong> <span style="color: #ff4444; font-size: 1.1em; font-weight: bold;"><<print setup.vip_dancers[$daily_vip_dancer].name>></span> (Dancer #<<print $daily_vip_dancer>>)</p> <p style="color: #ccc; font-size: 0.95em;">A different headlining dancer takes the VIP stage every night. Tonight, <strong><<print setup.vip_dancers[$daily_vip_dancer].name>></strong> is commanding the lounge, swaying seductively under the warm crimson spotlights and putting on a slow, hypnotic show for the high-rollers.</p> <p style="color: #aaa; font-size: 0.9em; margin-bottom: 14px;">The velvet-lined private rooms in the back are reserved exclusively for private one-on-one sessions with tonight's dancer.</p> <<if $money >= 2000>> <<link "Request a Private Dance with " + setup.vip_dancers[$daily_vip_dancer].name + " ($2000)">> <<set $money -= 2000>> <<set $vip_private_dancer to $daily_vip_dancer>> <<set $vip_private_stage to "strip">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<else>> <span style="color: #666;">Private Dance with <<print setup.vip_dancers[$daily_vip_dancer].name>> ($2000) - Insufficient Funds</span> <</if>> <</if>> </div> </div> </div> /* --- ORGY ROOM --- */ <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #aa00ff; margin-bottom: 15px;"> <h4>The Back Room</h4> A heavy door guarded by a woman in lingerie leads to the VIP orgy suite. Only the elite are allowed inside. <br><br> <<if $money >= 500 and $stamina >= 50>> <<link "Join the Orgy ($500, Costs 50 Stamina)">> <<set $money -= 500>> <<set $stamina -= 50>> <<set _oldTime to $time>> <<set $time += 120>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <</if>> <<goto "Club_VIP_Orgy">> <</link>> <<else>> <span style="color: #555;">Requires $500 and 50 Stamina to survive the room.</span> <</if>> </div> <<if $auction_unlocked is true>> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ffd700; margin-bottom: 15px;"> <h4>The Platinum Room</h4> A pair of heavily armed private military contractors stand guard in front of a reinforced steel door. They scan your face, and the light above the biometric scanner turns green. This is where the city's true elite trade their most valuable human assets. <br><br> <<link "Enter the Platinum Room (Auction)">> <<goto "Location_Auction">> <</link>> </div> <<else>> <div style="background-color: #111; padding: 10px; border-left: 3px solid #444; margin-bottom: 15px;"> <h4>The Platinum Room</h4> A pair of heavily armed contractors stand guard in front of a reinforced steel door. You step toward them, but one raises a hand to your chest. "Invite only. You're not on the list." </div> <</if>> /* --- GÉNÉRATION D'UNE RECRUE QUOTIDIENNE --- */ <<if $daily_club_recruit is undefined>> <<set _rarityRoll to random(1, 100)>> <<if _rarityRoll <= 75>> <<set $daily_club_recruit to { name: $name_pool_mercs.random(), type: "Mercenary", specialty: "none", strength: random(7, 9), loyalty: random(65, 85), upkeep: random(150, 250), assignment: "idle" }>> <<else>> <<set _spec_pool to ["Hacker", "Corrupt Ex-Cop", "Street Captain"]>> <<set _rolled_spec to _spec_pool.random()>> <<set $daily_club_recruit to { name: $name_pool_mercs.random(), type: "Elite Specialist - " + _rolled_spec, specialty: _rolled_spec, strength: (_rolled_spec is "Hacker" ? random(2, 4) : random(8, 10)), loyalty: random(75, 95), upkeep: random(400, 600), assignment: "idle" }>> <</if>> <</if>> /* --- AFFICHAGE DE LA RECRUE --- */ <h4>Mercenary Contracting</h4> <<if $daily_club_recruit is "hired">> <em>You've tapped out the local talent pool for tonight. The other professionals here are already on cartel payrolls. Check back tomorrow.</em> <<else>> <<if $daily_club_recruit.specialty isnot "none">> A sharply dressed individual raises a glass of expensive champagne in your direction. "My particular set of skills isn't cheap, but it will multiply your profits tenfold." <<else>> A man methodically cleaning a combat knife under the table gestures for you to sit down. "I heard you're building an organization. If you want real security, it's going to cost you." <</if>> <br><br> <<set _borderColor to ($daily_club_recruit.specialty isnot "none" ? "#ffd700" : "#00ffaa")>> <<set _reqLevel to ($daily_club_recruit.specialty isnot "none" ? 8 : 5)>> <div @style="'background-color: #111; padding: 15px; border-left: 3px solid ' + _borderColor + ';'"> <strong><<print $daily_club_recruit.name>></strong> (<<print $daily_club_recruit.type>>)<br> <<if $daily_club_recruit.specialty is "Hacker">> <span style="color: #ffd700;"><em>Trait: Cyber-Sec (Boosts streaming and escort income globally).</em></span><br> <<elseif $daily_club_recruit.specialty is "Corrupt Ex-Cop">> <span style="color: #ffd700;"><em>Trait: The Fixer (Reduces street arrest rates and bypasses political lobbying).</em></span><br> <<elseif $daily_club_recruit.specialty is "Street Captain">> <span style="color: #ffd700;"><em>Trait: The Pimp (Significantly boosts income and safety for all street workers).</em></span><br> <</if>> <br> <strong>Combat Strength:</strong> <<print $daily_club_recruit.strength>> / 10<br> <strong>Base Loyalty:</strong> <<print $daily_club_recruit.loyalty>> / 100<br> <strong>Daily Wage:</strong> $<<print $daily_club_recruit.upkeep>>/day<br> <br> <<set _hiringBonus to ($daily_club_recruit.specialty isnot "none" ? 2500 : 1000)>> <strong>Hiring Bonus:</strong> $<<print _hiringBonus>><br> <strong>Reputation Required:</strong> Level <<print _reqLevel>> <br><br> <<if $rep_level >= _reqLevel>> <<if $money >= _hiringBonus>> <<link "Hire " + $daily_club_recruit.name + " ($" + _hiringBonus + ")">> <<set $money -= _hiringBonus>> <<set $daily_club_recruit.custom_weapon to "inherited">> <<set $daily_club_recruit.custom_armor to "inherited">> <<run $gang_members.push($daily_club_recruit)>> <<set $daily_club_recruit to "hired">> <<goto "Club_VIP_Floor">> <</link>> <<else>> <span style="color: #ff4444;"><em>You don't have enough money to pay this premium hiring bonus.</em></span> <</if>> <<else>> <span style="color: #ff4444;"><em>They scoff at your approach. "I don't work for small-timers. Build up your street rep, then we'll talk."</em></span> <</if>> </div> <</if>> <br>---<br> <</nobr>> <<link "Back downstairs">><<goto "Location_NeonClub">><</link>>
<h3>Private Booth</h3> You sit on the plastic seating of the private booth. The girl walks in, locking the door behind her. The next thirty minutes are a blur of sweat, skin, and neon lights. <br><br> <<randomImage "images/Sex/club/down/striptease/private/" 5 0 "#00aaff">> <br><br> She goes through the motions of her routine, her cheap perfume barely masking the smell of stale smoke and spilled liquor in the cramped space. She grinds heavily against your lap to build the tension before dropping to her knees, making sure you get exactly what you paid for. <br><br> <<randomImage "images/Sex/club/down/striptease/bj/" 7 0 "#00aaff">> <br><br> The cheap plastic seat creaks under the shifting weight as she climbs up and straddles you. There is no romance or hesitation here, just raw, transactional friction in the dim light of the club. You take what you came for, driving into her until it is over. <br><br> <<randomImage "images/Sex/club/down/striptease/sex/" 16 0 "#00aaff">> <br><br> <<link "Leave the booth">><<goto "Club_Normal_Floor">><</link>>
<h3>The Back Room</h3> You step into a massive suite. The air is thick with smoke and heavy breathing. There are no names here, just VIPs indulging in absolute excess. You strip down and join the chaos. <br><br> <<set $counters.outside += 5>> <<randomImage "images/Sex/club/up/orgy/" 24 0 "#aa00ff">> <br><br> You lose yourself in the tangled mass of bodies. The room is a sensory overload of groping hands, muffled moans, and shifting partners. Nobody asks for permission, and nobody holds back as you transition seamlessly from one intense encounter to the next. <br><br> <<randomImage "images/Sex/club/up/orgy/" 24 0 "#aa00ff">> <br><br> Time loses all meaning in the dim, red-tinted light. Exhaustion tries to set in, but the sheer primal energy of the suite keeps you pushing forward. You indulge in every degenerate whim, fully immersed in the thrill of the city's elite acting like absolute animals. <br><br> <<randomImage "images/Sex/club/up/orgy/" 24 0 "#aa00ff">> <br><br> You leave the room hours later, completely drained but highly satisfied. <br><br> <<link "Head back to the lounge">><<goto "Club_VIP_Floor">><</link>>
<<nobr>> <<if setup.vip_dancers is undefined or setup.vip_dancers[1].isDuo is undefined>> <<initVipDancerData>> <</if>> <<if $vip_private_dancer is undefined>> <<set $vip_private_dancer to ($daily_vip_dancer || 1)>> <</if>> <<if $vip_private_stage is undefined>> <<set $vip_private_stage to "strip">> <</if>> <<set _dancer to setup.vip_dancers[$vip_private_dancer]>> <<set _videoList to _dancer[$vip_private_stage]>> <<if $vip_variant_idx is undefined or $vip_variant_idx >= _videoList.length or $vip_variant_idx < 0>> <<set $vip_variant_idx to 0>> <</if>> <<set _currentVideoFile to _videoList[$vip_variant_idx]>> <<set _videoPath to "images/Sex/club/up/strip/" + $vip_private_dancer + "/" + _currentVideoFile>> <div style="background-color: #121212; border: 1px solid #333; padding: 15px; border-radius: 6px; margin-bottom: 20px;"> <div style="display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #ff4444; padding-bottom: 8px; margin-bottom: 15px;"> <<if $vip_private_dancer is 1>> <h3 style="margin: 0; color: #ff4444;">VIP Private Suite — Duo #1 (<<print _dancer.name>>)</h3> <<else>> <h3 style="margin: 0; color: #ff4444;">VIP Private Suite — Dancer #<<print $vip_private_dancer>> (<<print _dancer.name>>)</h3> <</if>> <span style="color: #aaa; font-size: 0.9em;">VIP Lounge</span> </div> <!-- Navigation Tabs for Private Dance Stages --> <div style="display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 15px;"> <<set _stages to ($vip_private_dancer is 1 ? [ { id: "strip", label: "1. Duo Striptease" }, { id: "nude", label: "2. Fully Nude Duo" }, { id: "blow", label: "3. Double Blowjob" }, { id: "fuck", label: "4. Threesome Fuck" }, { id: "cum", label: "5. Climax" } ] : [ { id: "strip", label: "1. Striptease" }, { id: "nude", label: "2. Fully Nude" }, { id: "blow", label: "3. Oral Service" }, { id: "fuck", label: "4. Hard Fuck" }, { id: "cum", label: "5. Climax" } ])>> <<for _i = 0; _i < _stages.length; _i++>> <<capture _i>> <<set _st to _stages[_i]>> <<if $vip_private_stage is _st.id>> <span style="padding: 6px 14px; background: #ff4444; color: #fff; font-weight: bold; border-radius: 4px; box-shadow: 0 0 8px rgba(255, 68, 68, 0.4);"> <<print _st.label>> </span> <<else>> <<link _st.label>> <<set $vip_private_stage to _st.id>> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <</if>> <</capture>> <</for>> </div> <!-- Main Video Player --> <div style="border: 2px solid #ff4444; padding: 6px; text-align: center; margin-bottom: 18px; background-color: #050505; border-radius: 5px; box-shadow: 0 0 15px rgba(255, 68, 68, 0.25);"> <video autoplay loop muted playsinline style="max-width: 100%; height: auto; max-height: 520px; border-radius: 4px; display: block; margin: 0 auto;"> <source @src="_videoPath" type="video/mp4"> </video> </div> <!-- Variant Selector if Multiple Clips Exist for this Stage --> <<if _videoList.length > 1>> <div style="background-color: #1a1a1a; padding: 8px 12px; border-radius: 4px; margin-bottom: 15px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap;"> <span style="color: #bbb; font-size: 0.9em;"><strong>Camera Angle / Variation:</strong></span> <<for _v = 0; _v < _videoList.length; _v++>> <<capture _v>> <<if $vip_variant_idx is _v>> <span style="padding: 3px 9px; background: #880022; color: #fff; font-weight: bold; border-radius: 3px; font-size: 0.85em;">Angle <<print _v + 1>></span> <<else>> <<link `"Angle " + (_v + 1)`>> <<set $vip_variant_idx to _v>> <<goto "Club_VIP_Private">> <</link>> <</if>> <</capture>> <</for>> </div> <</if>> <!-- Atmospheric Text and Progression Actions per Stage --> <div style="background: #181818; padding: 15px; border-radius: 4px; border-left: 3px solid #ff4444; margin-bottom: 15px; line-height: 1.6;"> <<if $vip_private_stage is "strip">> <<if $vip_private_dancer is 1>> <p><<print _dancer.name>> shut the soundproof heavy door and draw the crimson velvet curtains, shutting out the roaring crowd of Club Apex. The low hum of the club bass pulses through the plush leather floor seating as both women step into the soft glow of the private booth. Smiling seductively at you and then at each other, they move together in close synchronization, slowly teasing each other's outfits off piece by piece.</p> <p>Every glance and slow peel of fabric is calculated to pull your eyes along their intertwined bodies. Their hands roam over each other's curves, trading gentle caresses until both are standing before you in sheer lace that hugs their waists and breasts.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Ask them to take it all off (Fully Nude)">> <<set $vip_private_stage to "nude">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<link "Skip ahead: Have them drop to their knees (Double Oral)">> <<set $vip_private_stage to "blow">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> </div> <<else>> <p><<print _dancer.name>> shuts the soundproof door and draws the heavy velvet curtains, isolating the booth from the deafening roar of Club Apex. The low hum of the club bass vibrates through the plush leather seating. She steps into the dim red lights, catching your eye with a knowing smirk as she begins to move, slowly teasing her outfit off piece by piece.</p> <p>Every movement is calculated to pull your eyes along the curves of her body, leaving her in sheer lace that hugs her hips and breasts.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Ask her to take it all off (Fully Nude)">> <<set $vip_private_stage to "nude">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<link "Skip ahead: Tell her to get on her knees (Oral)">> <<set $vip_private_stage to "blow">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> </div> <</if>> <<elseif $vip_private_stage is "nude">> <<if $vip_private_dancer is 1>> <p>Unclasping the final delicate straps of lace, both girls let every scrap of fabric fall to the velvet carpet. Completely naked, their bare bodies press intimately against each other, skin glistening softly in the crimson ambient lighting of the suite. Giggling huskily, they step onto the sofa beside you—one draping her arms around your neck to press warm kisses against your ear, while the other straddles your lap, grinding her wet, smooth warmth against your groin in slow, rolling hip circles.</p> <p>The small private booth fills with the sweet scent of expensive perfume and heated skin as four soft hands explore your chest, shoulders, and thighs.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Guide both of them down between your knees (Double Oral)">> <<set $vip_private_stage to "blow">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<link "Spread them across the leather sofa and fuck them">> <<set $vip_private_stage to "fuck">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> </div> <<else>> <p>She unclasps the delicate lace, dropping every remaining piece of fabric to the velvet carpet. Completely bare, her skin glistens faintly in the crimson glow of the private booth. She climbs onto the sofa, straddling your lap and grinding her soft, warm body against you with slow, deliberate rotations.</p> <p>The rich fragrance of perfume and warm skin fills the small room as she runs her fingers along your jaw, her breathing turning shallow as she feels how hard you are beneath her.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Pull her down to her knees for head">> <<set $vip_private_stage to "blow">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<link "Spread her on the leather couch and fuck her">> <<set $vip_private_stage to "fuck">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> </div> <</if>> <<elseif $vip_private_stage is "blow">> <<if $vip_private_dancer is 1>> <p><<print _dancer.name>> slide down onto their knees side by side on the thick plush rug between your parted legs. With practiced teamwork, they unbuckle your belt and slide your trousers down, releasing your hard, aching cock into their warm hands. One girl leans in to slowly lick up the length of your shaft and swirl her tongue around the sensitive tip, while the other tenderly cups your balls and kisses the base.</p> <p>They take turns taking your throbbing cock into their warm, wet mouths, passing you back and forth between deep, breathy strokes. Whenever one pulls off to catch her breath, they share a wet kiss before diving right back in, their synchronized moans vibrating straight through your core.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Pull them up onto the couch and fuck them">> <<set $vip_private_stage to "fuck">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<link "Rest your hands on their heads and climax in their mouths">> <<set $vip_private_stage to "cum">> <<set $vip_variant_idx to 0>> <<set _oldTime to $time>> <<set $time += 30>> <<set $stamina to Math.min($maxstamina, $stamina + 50)>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <</if>> <<goto "Club_VIP_Private">> <</link>> </div> <<else>> <p><<print _dancer.name>> slides down smoothly onto her knees on the thick rug between your legs. With experienced fingers, she unfastens your trousers and slides them down, releasing your aching cock. She wets her lips, locking eyes with you before taking your head into her warm mouth.</p> <p>She bobs her head in steady, passionate rhythms, her tongue swirling around your shaft while her fingers cradle your balls. Her muffled moans vibrate through you with every deep stroke.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Pull her up onto the couch and fuck her">> <<set $vip_private_stage to "fuck">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> <<link "Hold the back of her head and climax in her mouth">> <<set $vip_private_stage to "cum">> <<set $vip_variant_idx to 0>> <<set _oldTime to $time>> <<set $time += 30>> <<set $stamina to Math.min($maxstamina, $stamina + 50)>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <</if>> <<goto "Club_VIP_Private">> <</link>> </div> <</if>> <<elseif $vip_private_stage is "fuck">> <<if $vip_private_dancer is 1>> <p>You pull <<print _dancer.name>> up onto the wide leather sofa. One girl eagerly bends forward on all fours, arching her back while looking over her shoulder at you with dilated eyes. Her partner slides alongside you, wrapping an arm over your neck and kissing you hungrily while fondling her friend's breasts. In one forceful, smooth thrust, you sink deep into the soaking-wet, tight folds waiting for you.</p> <p>A sharp gasp fills the booth as your hips rhythmically slap against her thighs. The second dancer caresses your waist and guides your movements, moaning as she kisses her partner, before they eagerly switch positions so neither girl is left unsatisfied.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Drive harder and reach climax with both of them">> <<set $vip_private_stage to "cum">> <<set $vip_variant_idx to 0>> <<set _oldTime to $time>> <<set $time += 30>> <<set $stamina to Math.min($maxstamina, $stamina + 50)>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <</if>> <<goto "Club_VIP_Private">> <</link>> </div> <<else>> <p>You pull <<print _dancer.name>> up onto the plush leather sofa, hiking her slender legs up over your shoulders. Her wet heat welcomes you as you thrust forward, sinking completely into her tight, slick folds in one deep stroke. She gasps sharply, throwing her head back against the leather.</p> <p>The rhythmic slapping of skin against skin mingles with the muffled bass rattling the booth walls. She clutches your arms tightly, matching every hard drive of your hips with eager whimpers of pleasure.</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Drive harder and reach climax">> <<set $vip_private_stage to "cum">> <<set $vip_variant_idx to 0>> <<set _oldTime to $time>> <<set $time += 30>> <<set $stamina to Math.min($maxstamina, $stamina + 50)>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <</if>> <<goto "Club_VIP_Private">> <</link>> </div> <</if>> <<elseif $vip_private_stage is "cum">> <<if $vip_private_dancer is 1>> <p>A violent surge of ecstasy rises through your spine. Groaning deeply, you bury yourself completely and release, pumping rope after rope of hot cum across their quivering, eager bodies. Both women shudder in unison, clinging tightly to you with breathy sighs and satisfied moans as the intense climax washes through everyone in the booth.</p> <p>The three of you collapse back onto the deep cushions, your chests heaving in rhythm as the post-orgasmic tranquility settles over the room. Both girls cuddle against you with warm smiles, stroking your chest until you catch your breath.</p> <p style="color: #00ffaa; font-weight: bold;">+50 Stamina restored | Time spent: 30 minutes</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Replay private dance with " + _dancer.name>> <<set $vip_private_stage to "strip">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> </div> <<else>> <p>A sudden overwhelming rush of heat pulses up your spine. With a low groan, you let go completely, pumping hot ropes of cum deep across her quivering skin. <<print _dancer.name>> shivers with pleasure, letting out a breathy sigh as the intense sensations wash through both of you.</p> <p>You both lean back into the leather cushions, catching your breath as the post-orgasmic warmth settles in. You feel completely relieved and invigorated.</p> <p style="color: #00ffaa; font-weight: bold;">+50 Stamina restored | Time spent: 30 minutes</p> <div style="margin-top: 15px; display: flex; gap: 12px; flex-wrap: wrap;"> <<link "Replay private dance with " + _dancer.name>> <<set $vip_private_stage to "strip">> <<set $vip_variant_idx to 0>> <<goto "Club_VIP_Private">> <</link>> </div> <</if>> <</if>> </div> <div style="margin-top: 10px; border-top: 1px solid #333; padding-top: 12px;"> <<link "Leave the private booth and return to VIP Lounge">> <<unset $vip_private_stage>> <<unset $vip_variant_idx>> <<goto "Club_VIP_Floor">> <</link>> </div> </div> <</nobr>>
/* Jet de combat : Force + Dé(1-10) */ <<set _playerRoll to $strength + random(1, 10)>> <<set _enemyRoll to $enemy.strength + random(1, 10)>> <<if _playerRoll >= _enemyRoll>> /* Victoire : Le joueur prend des dégâts résiduels aléatoires (0 à 15) */ <<set _dmgTaken to random(0, 15)>> <<set $hp -= _dmgTaken>> <<if $hp <= 0>> <<goto "Combat_Lose">> <<else>> <<set $combat_log to "You overpowered the " + $enemy.name + " in a quick brawl, but took " + _dmgTaken + " damage in the process.">> <<goto "Combat_Win">> <</if>> <<else>> /* Défaite : L'ennemi vous écrase */ <<set $hp to 0>> <<goto "Combat_Lose">> <</if>>
<h3>Defeat...</h3> <div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/combat/lostfight.webp" style="max-width: 100%; height: auto; border-radius: 3px;"> <<if $drunk_units >= 15>> Everything goes black. You drank way too much. Vague flashes of a street brawl cross your mind... you definitely picked a fight with the wrong person in your drunken state. <<else>> Everything goes black. You have been beaten to a pulp. <</if>> Your vision fades as you hit the concrete... <<set $counters.combats_lost += 1>> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<set $raid_wave_in_progress to false>> <<set $assault_stage_in_progress to false>> <<if $war_state isnot undefined>> <<set $war_state.raid_wave to 0>> <<set $war_state.assault_stage to 0>> <</if>> <<addXP 5>> <<link "Pass out">><<goto "Pass_Out">><</link>>
<h3>⚔️ Combat in progress!</h3> <<nobr>> /* Attribution automatique et persistante de l'image de l'ennemi si non définie */ <<if $enemy.img is undefined or $enemy.img is "">> <<if $enemy.name is "Angry Boyfriend">> <<set $enemy.img to "images/combat/club" + random(1, 5) + ".webp">> <<elseif $enemy.name is "Street Thug">> <<set $enemy.img to "images/combat/street thug" + random(1, 5) + ".jpg">> <<elseif $enemy.name is "Rival Thug">> <<set $enemy.img to "images/combat/streetpunk" + random(1, 8) + ".jpg">> <<elseif $enemy.name is "Rival Thugs">> <<set $enemy.img to "images/combat/criminal" + random(1, 8) + ".jpg">> <<elseif $enemy.name is "Desperate Debtor">> <<set $enemy.img to either("images/combat/junkie" + random(1, 6) + ".jpg", "images/combat/hobo" + random(1, 6) + ".jpg")>> <<elseif $enemy.name is "Armed Target">> <<set $enemy.img to either("images/combat/19.jpg", "images/combat/angrywoman.jpg")>> <<elseif $enemy.name is "Angry Bodyguard" or $enemy.name is "Hotel Security" or $enemy.name is "Armed Security">> <<set $enemy.img to "images/combat/fighter" + random(1, 4) + ".jpg">> <<elseif $enemy.name is "Furious Owner" or $enemy.name is "Angry Occupant">> <<set $enemy.img to "images/combat/jealous" + random(1, 8) + ".jpg">> <<elseif $enemy.name is "Paranoid Guest">> <<set $enemy.img to "images/combat/junkie" + random(1, 6) + ".jpg">> <<elseif $enemy.name is "Resisting Targets">> <<set $enemy.img to either("images/combat/angrywoman.jpg", "images/combat/streetpunk" + random(1, 8) + ".jpg")>> <<elseif $enemy.name is "Cell Block Enforcer">> <<set $enemy.img to "images/combat/prisonfighter" + random(1, 10) + ".jpg">> <<elseif $enemy.name is "Armored Riot Squad">> <<set $enemy.img to "images/combat/forces.jpg">> <<else>> <<set $enemy.img to "images/combat/criminal" + random(1, 8) + ".jpg">> <</if>> <</if>> <div style="border: 2px solid #ff4444; padding: 8px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img @src="$enemy.img" style="max-width: 100%; max-height: 260px; height: auto; border-radius: 3px;"> </div> <div style="display: flex; justify-content: space-between; border: 1px solid #444; padding: 10px; background-color: #111;"> <div> <strong>You</strong><br> HP: $hp / $maxhp<br> Stamina: <span style="color: #00ffaa;">$stamina / $maxstamina</span> </div> <div style="text-align: right;"> <strong>$enemy.name</strong><br> HP: $enemy.hp / $enemy.max_hp </div> </div> <br> <<if $combat_log isnot "">> <div style="border-left: 3px solid #555; padding-left: 10px;"> $combat_log </div> <br> <</if>> <strong>Your Action:</strong><br> <div style="display: flex; gap: 10px; margin-top: 10px;"> <!-- ATTACK BUTTON --> <<if $stamina >= 10>> <div style="flex: 1; text-align: center; background-color: #1a1a1a; border: 1px solid #ff4444; padding: 10px;"> <img src="images/combat/attack.png" style="max-width: 50px; margin-bottom: 5px;"><br> <<link "Attack (10 Sta)">> <<set $combat_action to "attack">> <<goto "Combat_Turn">> <</link>> </div> <<else>> <div style="flex: 1; text-align: center; background-color: #111; border: 1px solid #555; padding: 10px; color: #555;"> <img src="images/combat/attack.png" style="max-width: 50px; margin-bottom: 5px; opacity: 0.3;"><br> <em>Exhausted</em> </div> <</if>> <!-- BLOCK BUTTON --> <<if $stamina >= 5>> <div style="flex: 1; text-align: center; background-color: #1a1a1a; border: 1px solid #00aaff; padding: 10px;"> <img src="images/combat/block.png" style="max-width: 50px; margin-bottom: 5px;"><br> <<link "Block (5 Sta)">> <<set $combat_action to "defend">> <<goto "Combat_Turn">> <</link>> </div> <<else>> <div style="flex: 1; text-align: center; background-color: #111; border: 1px solid #555; padding: 10px; color: #555;"> <img src="images/combat/block.png" style="max-width: 50px; margin-bottom: 5px; opacity: 0.3;"><br> <em>Exhausted</em> </div> <</if>> <!-- REST BUTTON --> <div style="flex: 1; text-align: center; background-color: #1a1a1a; border: 1px solid #00ffaa; padding: 10px;"> <img src="images/combat/rest.png" style="max-width: 50px; margin-bottom: 5px;"><br> <<link "Rest (+20 Sta)">> <<set $combat_action to "rest">> <<goto "Combat_Turn">> <</link>> </div> </div> /* OPTION DE BASCULE VERS LA FUSILLADE TACTIQUE SI ARME À FEU ÉQUIPÉE */ <<if $in_prison is false and $active_firearm isnot "none" and $active_firearm isnot undefined and ($gun_mag > 0 or $inventory.ammo > 0)>> <div style="margin-top: 15px; padding: 10px; background-color: #221111; border: 1px solid #ff4444; text-align: center;"> 🔫 <strong>Firearm Equipped (<<print $weapon_db[$active_firearm].name>>):</strong> <<link "[ Draw Firearm & Escalate to Tactical Shootout (+3 Heat) ]">> <<addHeat 3>> <<set $player_cover to 0>> <<set $enemy_suppressed to false>> <<set $combat_log to "You pull out your <strong>" + $weapon_db[$active_firearm].name + "</strong>! The brawl instantly escalates into a deadly firefight!">> <<goto "Gunfight_Main">> <</link>> </div> <</if>> <</nobr>>
/* 1. TOUR DU JOUEUR */ <<if $combat_action is "attack">> <<set $stamina -= 10>> /* Récupération de l'arme de mêlée et de ses dégâts */ <<set _wepDmg to 0>> <<set _wepName to "bare hands">> <<if $in_prison is true and $inventory.shank > 0>> <<set _wepDmg to 10>> <<set _wepName to "Prison Shank">> <<elseif $in_prison is false and $active_melee isnot "none" and $active_melee isnot undefined>> <<set _wepDmg to $weapon_db[$active_melee].damage>> <<set _wepName to $weapon_db[$active_melee].name>> <</if>> /* Dégâts du joueur : (Force x2 à Force x4) + Dégâts de l'arme */ <<set _pMin to ($strength * 2) + _wepDmg>> <<set _pMax to ($strength * 4) + _wepDmg>> <<set _pDmg to random(_pMin, _pMax)>> <<set $enemy.hp -= _pDmg>> <<set _logPlayer to "You hit the " + $enemy.name + " with your " + _wepName + " for <strong style='color:#ff4444;'>" + _pDmg + "</strong> damage!">> <<elseif $combat_action is "defend">> <<set $stamina -= 5>> <<set _logPlayer to "You take a defensive stance, using your strength to brace for impact.">> <<elseif $combat_action is "rest">> <<set $stamina += 20>> <<if $stamina > $maxstamina>><<set $stamina to $maxstamina>><</if>> <<set _logPlayer to "You step back and catch your breath, recovering stamina.">> <</if>> /* 2. VÉRIFICATION : L'ennemi est-il mort ? */ <<if $enemy.hp <= 0>> <<if $combat_return_victory isnot undefined>> <<goto $combat_return_victory>> <<else>> <<goto "Combat_Win">> <</if>> <<else>> /* 3. TOUR DE L'ENNEMI */ <<set _dodgeChance to $intelligence * 5>> <<if random(1, 100) <= _dodgeChance>> <<set _logEnemy to "The " + $enemy.name + " attacks, but you read their movement and <strong style='color:#00ffaa;'>dodge perfectly</strong>!">> <<else>> <<set _eMin to $enemy.strength * 2>> <<set _eMax to $enemy.strength * 4>> <<set _eDmg to random(_eMin, _eMax)>> <<if $combat_action is "defend">> <<set _blockValue to $strength * 2>> <<set _eDmg -= _blockValue>> <<if _eDmg < 0>><<set _eDmg to 0>><</if>> <<set _logEnemy to "The " + $enemy.name + " hits you for " + _eDmg + " damage (Blocked " + _blockValue + ").">> <<else>> <<set _logEnemy to "The " + $enemy.name + " hits you for <strong style='color:#ff4444;'>" + _eDmg + "</strong> damage!">> <</if>> <<set $hp -= _eDmg>> <</if>> /* 4. VÉRIFICATION : Le joueur est-il mort ? */ <<if $hp <= 0>> <<if $combat_return_defeat isnot undefined>> <<goto $combat_return_defeat>> <<else>> <<goto "Combat_Lose">> <</if>> <<else>> <<set $combat_log to _logPlayer + "<br>" + _logEnemy>> <<goto "Combat_Main">> <</if>> <</if>>
<h3>Victory</h3> $combat_log <br><br> The $enemy.name is down! <<set $counters.combats_won += 1>> <<addXP 15>> <<link "Catch your breath and leave">> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<goto $current_location>><</link>>
<h3>NeonList - Classified Ads</h3> The site is ancient, filled with scams, low-quality pictures, and desperate sellers. <<nobr>> <strong>Your Bank Account:</strong> $ $money --- <<if $property_result isnot "">> $property_result <br>---<br> <</if>> <strong>Vehicles for Sale:</strong><br><br> <<if $owned_vehicles.includes("Rusty Wreck")>> //Listing removed: You already bought this vehicle.//<br><br> <<else>> <strong>1998 Rusty Sedan</strong> - Runs, mostly. Missing a hubcap. AC doesn't work. No garage required (park it on the street).<br> <<if $money >= 500>> <<link "Buy the Rusty Sedan ($500)">> <<set $money -= 500>> <<run $owned_vehicles.push("Rusty Wreck")>> <<set $active_vehicle to "Rusty Wreck">> <<set $property_result to "Transaction successful. You met the seller in a shady parking lot. The keys are yours.">> <<goto "Computer_Ads">> <</link>> <<else>> //Price: $500 (Insufficient funds)// <</if>> <br><br> <</if>> --- <strong>🏠 Real Estate & Off-Grid Sublets (No Credit Check / Cash Only):</strong><br><br> <div style="background-color: #1a1612; padding: 14px; border-left: 3px solid #ff5500; border-radius: 4px; margin-bottom: 14px;"> <h4 style="margin: 0 0 6px 0; color: #ff5500;">🏚️ Dilapidated Trap House (Slums Projects)</h4> <em>"For rent or quick cash sale by owner. Fortified ground floor duplex with reinforced steel security door, barred windows, and gas cooking stove hookup. Out of state landlord; no questions asked as long as rent arrives on time."</em> <br><br> <strong>Requirement:</strong> Reputation Level 2<br> <strong>Lease Terms:</strong> $500 / week <em>(paid in cash or offshore)</em> | <strong>Outright Deed:</strong> $18,000 <em>($200/week property tax)</em><br><br> <<if $empire_properties && $empire_properties.traphouse && $empire_properties.traphouse.owned is true>> <span style="color: #00ffaa;"><strong>[ Owned Outright — Deed in your Safe ]</strong></span><br> [[🏚️ Visit Trap House|Property_TrapHouse]] <<elseif $empire_properties && $empire_properties.traphouse && $empire_properties.traphouse.rented is true>> <span style="color: #00e5ff;"><strong>[ Currently Leased ($500/week) ]</strong></span><br><br> <<if $money >= 18000 or $laundered_money >= 18000>> <<link "[ 🏛️ Buy Out Trap House Deed ($18,000) ]">> <<if $laundered_money >= 18000>> <<set $laundered_money -= 18000>> <<else>> <<set $money -= 18000>> <</if>> <<set $empire_properties.traphouse.rented to false>> <<set $empire_properties.traphouse.owned to true>> <<set $property_result to "You bought out the trap house deed outright. You now own the building!">> <<goto "Computer_Ads">> <</link>> <<else>> <span style="color: #888;"><em>(Requires $18,000 cash or offshore to buy out deed)</em></span> <</if>> | [[🏚️ Visit Trap House|Property_TrapHouse]] <<else>> <<if $rep_level >= 2>> <<if $money >= 500 or $laundered_money >= 500>> <<link "[ 🔑 Sign Cash Lease — Rent Trap House ($500 upfront) ]">> <<if $money >= 500>> <<set $money -= 500>> <<else>> <<set $laundered_money -= 500>> <</if>> <<set $empire_properties.traphouse.rented to true>> <<set $property_result to "You met the landlord's contact at a corner store and exchanged $500 for the heavy brass keys. The Slums Trap House is now yours to operate!">> <<goto "Computer_Ads">> <</link>> | <<else>> <span style="color: #888;">[ Lease requires $500 ]</span> | <</if>> <<if $money >= 18000 or $laundered_money >= 18000>> <<link "[ 🏛️ Buy Outright — Purchase Deed ($18,000) ]">> <<if $laundered_money >= 18000>> <<set $laundered_money -= 18000>> <<else>> <<set $money -= 18000>> <</if>> <<set $empire_properties.traphouse.owned to true>> <<set $property_result to "You wired $18,000 to the seller's escrow account. The physical deed to the Slums rowhouse was couriered to your apartment safe.">> <<goto "Computer_Ads">> <</link>> <<else>> <span style="color: #888;">[ Buy Deed requires $18,000 ]</span> <</if>> <<else>> <span style="color: #888;"><em>(Seller requires a street reputation of at least Level 2 to deal with you.)</em></span> <</if>> <</if>> </div> --- <<link "Close Browser">> <<set $property_result to "">> <<goto "Computer_Main">> <</link>> <</nobr>>
<<nobr>> <h3><span style="color: #ff4444;">[ ENCRYPTED NETWORK ]</span> ShadowBoard</h3> <div style="background-color: #0a0a0a; color: #00ff00; padding: 15px; font-family: 'Courier New', Courier, monospace; border: 1px solid #333; margin-bottom: 20px;"> > Establishing secure Tor routing... <span style="color: #00ff00;">SUCCESS</span><br> > Bypassing local surveillance... <span style="color: #00ff00;">SUCCESS</span><br> > Welcome to ShadowBoard. No names. No faces. </div> <strong>Your Wallet:</strong> $<<print $money>> | <strong>Your Stamina:</strong> $stamina <<if $traits.contractor_3 is true>> | <span style="color: #00ffaa;"><strong>[ Contractor Lv.3: +50% Payouts & 4 Daily Contracts ]</strong></span> <<elseif $traits.contractor_2 is true>> | <span style="color: #00ffaa;"><strong>[ Contractor Lv.2: +30% Payouts & 4 Daily Contracts ]</strong></span> <<elseif $traits.contractor_1 is true>> | <span style="color: #00ffaa;"><strong>[ Contractor Lv.1: +15% Payouts ]</strong></span> <</if>> --- <<if $darkweb_log isnot "">> <div style="background-color: #220000; border-left: 4px solid #ff4444; padding: 10px; margin-bottom: 15px;"> <<print $darkweb_log>> </div> <</if>> <<if $active_job isnot null>> <div style="background-color: #1a1a1a; border: 1px solid #ff4444; padding: 15px;"> <strong style="color: #ff4444;">[!] ACTIVE CONTRACT PENDING</strong><br><br> <strong>Mission:</strong> <<print $active_job.name>><br> <strong>Target Location:</strong> <span style="color: #ffaa00;"><<print $active_job.district>></span><br> <strong>Expected Payout:</strong> $<<print $active_job.reward>><br><br> <em>Head to the district to complete the job before accepting a new one.</em><br><br> <<link "Abort Contract (Cancel this job)">> <<set $active_job to null>> <<set $darkweb_log to "Contract aborted. The client isn't happy, but your slot is now free.">> <<goto "Computer_DarkWeb">> <</link>> </div> <<else>> /* --- GÉNÉRATION QUOTIDIENNE DES JOBS --- */ <<set _currentDay to Math.floor($time / 1440)>> <<if _currentDay > $last_darkweb_day>> <<set $last_darkweb_day to _currentDay>> <<set $darkweb_jobs to []>> /* AJOUT DU BLACKMAIL AU POOL */ <<set _jobPool to ["hit", "drugs", "car", "debt", "blackmail"].slice()>> <<set _dailyJobCount to ($traits.contractor_2 is true ? 4 : 3)>> <<set _contractMult to ($traits.contractor_3 is true ? 1.50 : ($traits.contractor_2 is true ? 1.30 : ($traits.contractor_1 is true ? 1.15 : 1.0)))>> <<for _i to 0; _i < _dailyJobCount; _i++>> <<set _picked to _jobPool.pluck()>> <<set _targetDistrict to $district_list.random()>> <<if _picked is "hit">> <<run $darkweb_jobs.push({ id: "hit", name: "Target Elimination", desc: "Take out a rival. Discretion required.", district: _targetDistrict, reward: Math.floor(random(400, 800) * _contractMult), time: 180, stamina: 40 })>> <<elseif _picked is "drugs">> <<run $darkweb_jobs.push({ id: "drugs", name: "High-Risk Delivery", desc: "Move a package across territory.", district: _targetDistrict, reward: Math.floor(random(150, 250) * _contractMult), time: 120, stamina: 25 })>> <<elseif _picked is "car">> <<run $darkweb_jobs.push({ id: "car", name: "Vehicle Acquisition", desc: "Steal a specific luxury car.", district: _targetDistrict, reward: Math.floor(random(200, 400) * _contractMult), time: 120, stamina: 30 })>> <<elseif _picked is "debt">> <<run $darkweb_jobs.push({ id: "debt", name: "Debt Collection", desc: "Intimidate a gambler who refuses to pay.", district: _targetDistrict, reward: Math.floor(random(100, 200) * _contractMult), time: 60, stamina: 20 })>> <<elseif _picked is "blackmail">> <<run $darkweb_jobs.push({ id: "blackmail", name: "Honey Trap", desc: "Seduce a target and secretly record the encounter.", district: _targetDistrict, reward: Math.floor(random(500, 900) * _contractMult), time: 180, stamina: 35 })>> <</if>> <</for>> <</if>> /* --- AFFICHAGE DES JOBS --- */ <<if $darkweb_jobs.length is 0>> <em>The boards are completely empty today. Check back tomorrow.</em><br><br> <<else>> <strong>Available Contracts:</strong><br><br> <<for _i to 0; _i < $darkweb_jobs.length; _i++>> <<capture _i>> <<set _jobDisplay to $darkweb_jobs[_i]>> <div style="background-color: #111; border-left: 3px solid #00ff00; padding: 12px; margin-bottom: 15px;"> <strong style="color: #00ff00;"><<print _jobDisplay.name>></strong> | Payout: <strong style="color: #ffaa00;">$<<print _jobDisplay.reward>></strong><br> <em>Location: <strong><<print _jobDisplay.district>></strong></em><br> <span style="font-size: 0.9em; color: #aaa;"><<print _jobDisplay.desc>> <br>(Cost: <<print _jobDisplay.stamina>> Stamina, Takes <<print (_jobDisplay.time / 60)>> Hours)</span><br><br> /* CONDITION DE LA CAMÉRA POUR LE HONEY TRAP */ <<if _jobDisplay.id is "blackmail" and $has_camera is false>> <span style="color: #ff4444; font-style: italic;">//Requires a Hidden Camera to accept this contract.//</span> <<elseif _jobDisplay.id is "car" and $has_hotwire_kit is false>> <span style="color: #ff4444; font-style: italic;">//Requires an Hotwire Kit to accept this contract.//</span> <<else>> <<link "Accept Contract">> <<set $active_job to $darkweb_jobs[_i]>> <<run $darkweb_jobs.deleteAt(_i)>> <<set $darkweb_log to "Contract <strong>" + $active_job.name + "</strong> accepted. Head to the <strong style='color:#ffaa00;'>" + $active_job.district + "</strong> to execute the job.">> <<goto "Computer_DarkWeb">> <</link>> <</if>> </div> <</capture>> <</for>> <</if>> <</if>> --- <<link "Disconnect and return to desktop">> <<set $darkweb_log to "">> <<goto "Computer_Main">> <</link>> <</nobr>>
<h3>Desktop Computer</h3> The cooling fans hum quietly as the dual-monitor setup boots up. <<nobr>> --- <strong>Current Heat Level:</strong> <<if $heat < 20>><span style="color: #00ffaa;"><<print $heat>>% (Low Profile)</span> <<elseif $heat < 60>><span style="color: #ffaa00;"><<print $heat>>% (Police is watching)</span> <<else>><span style="color: #ff4444;"><<print $heat>>% (MOST WANTED)</span> <</if>> <br><hr style="border-color: #444;"><br> /* --- SYSTÈME D'EMAIL / DÉBUT DE LA QUÊTE --- */ <<if $black_swan_count >= 1 and $agency_email_read is false>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #aa00ff; animation: blinker 2s linear infinite;"> 📩 <strong>1 NEW UNREAD EMAIL</strong> <br><br> <<link "Read Email">> <<goto "Event_AgencyEmail">> <</link>> </div> <</if>> /* --- TIER 1 ARMORY (Outskirts) --- */ <<if $rep_level >= 3 and $money >= 2000 and $armory_low_unlocked is false>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #ffaa00; margin-bottom: 15px;"> 📩 <strong>1 NEW UNREAD EMAIL</strong><br><br> <<link "Read Email: Ironclad Surplus">><<goto "Event_ArmoryLow_Email">><</link>> </div> <</if>> /* --- TIER 2 ARMORY (Financial District) --- */ <<if $rep_level >= 7 and $money >= 20000 and $armory_high_unlocked is false>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #ff4444; margin-bottom: 15px;"> 📩 <strong>1 NEW ENCRYPTED MESSAGE</strong><br><br> <<link "Read Email: Vanguard Security">><<goto "Event_ArmoryHigh_Email">><</link>> </div> <</if>> /* --- INVITATION AUX ENCHÈRES UNDERGROUND --- */ <<if $traits.kidnapper_3 is true and $auction_unlocked is false>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #aa00ff; margin-bottom: 15px;"> [ 1 NEW UNREAD EMAIL (Dark Web) ] <br><br> <<link "Read Email: Flesh Market">><<goto "Event_AuctionEmail">><</link>> </div> <</if>> /* --- COURTIER EN CONTREBANDE DE GROS (MERIDIAN FREIGHT) --- */ <<if ($rep_level >= 4 or $traits.scavenger is true or $traits.contractor_1 is true or $contraband_warehouse_owned is true) and $contraband_broker_unlocked isnot true>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #00e5ff; margin-bottom: 15px;"> 📦 <strong>1 NEW ENCRYPTED MESSAGE (Freight Network)</strong> <br><br> <<link "Read Email: Meridian Freight Syndicate">><<goto "Event_ContrabandBroker_Email">><</link>> </div> <</if>> <br> <strong>Desktop Shortcuts:</strong><br><br> [[🌐 Neon Property Auctions|Computer_RealEstate]]<br> [[Shadow Real Estate |DarkWeb_RealEstate]]<br> [[🛒 NeonList (Classified Ads)|Computer_Ads]]<br> [[Log into ShadowBoard (Dark Web)|Computer_DarkWeb]]<br> [[Check the Dark Web Armory|DarkWeb_Armory]]<br> <<if $contraband_broker_unlocked is true>> <<link "🚂 Meridian Freight Exchange (Bulk Contraband & Weekly Manifests)">> <<set $exchange_return to "Computer_Main">> <<goto "Computer_ContrabandExchange">> <</link>><br> <</if>> <br><br> --- <</nobr>> <<link "Turn off the computer and stand up">> <<goto "Home">> <</link>>
<h3>Neon Property Auctions</h3> A minimalist, text-based website listing foreclosed and abandoned properties around the city. Because municipal property deeds are registered with City Hall, all bids must be wired from a <strong>Clean Offshore Account</strong> (launder street cash at <strong>Apex Management</strong> on the Neon Strip). <strong>Clean Offshore Balance:</strong> <span style="color: #00ffaa;">$<<print $laundered_money>></span> | <strong>Street Wallet (Unwashed):</strong> <span style="color: #888;">$<<print $money>></span> --- <<if $property_result isnot "">> $property_result <br>---<br> <</if>> <strong>Available Properties:</strong><br><br> /* --- SECTION GARAGE --- */ <<if $garage_level is 0>> <strong>Abandoned Warehouse Lock-up</strong> - A secluded industrial space with heavy rolling doors. Perfect for absolute privacy.<br> <<if $laundered_money >= 2000>> <<link "Purchase Property ($2,000 Offshore)">> <<set $laundered_money -= 2000>> <<set $garage_level to 1>> <<set $property_result to "Transaction successful. The access codes for the Warehouse Lock-up have been sent to you.">> <<goto "Computer_RealEstate">> <</link>> <<else>> //Price: $2,000 Clean Offshore Funds (Insufficient offshore balance — wash cash at Apex Management on the Neon Strip)// <</if>> <br><br> <<elseif $garage_level is 1>> <strong>Your Property: Warehouse Lock-up (Level 1)</strong> - Basic space.<br> <<if $laundered_money >= 5000>> <<link "Fund Expansion & Renovation ($5,000 Offshore)">> <<set $laundered_money -= 5000>> <<set $garage_level to 2>> <<set $property_result to "Transaction successful. Contractors will expand the floor space of your lock-up immediately.">> <<goto "Computer_RealEstate">> <</link>> <<else>> //Expansion Cost: $5,000 Clean Offshore Funds (Insufficient offshore balance)// <</if>> <br><br> <<elseif $garage_level is 2>> <strong>Your Property: Warehouse Lock-up (Level 2)</strong><br> //This property has been fully expanded.// <br><br> <</if>> /* --- SECTION CAVE --- */ <<if $basement_level is 0>> <strong>Underground Cellar</strong> - A deep, thick-walled basement located under a condemned building. Excellent soundproofing.<br> <<if $laundered_money >= 3000>> <<link "Purchase Property ($3,000 Offshore)">> <<set $laundered_money -= 3000>> <<set $basement_level to 1>> <<set $property_result to "Transaction successful. You now own the deed to the Underground Cellar.">> <<goto "Computer_RealEstate">> <</link>> <<else>> //Price: $3,000 Clean Offshore Funds (Insufficient offshore balance — wash cash at Apex Management on the Neon Strip)// <</if>> <br><br> <<elseif $basement_level is 1>> <strong>Your Property: Underground Cellar (Level 1)</strong> - Reinforced underground space.<br> <<if $laundered_money >= 7500>> <<link "Fund Excavation & Reinforcement ($7,500 Offshore)">> <<set $laundered_money -= 7500>> <<set $basement_level to 2>> <<set $property_result to "Transaction successful. The cellar has been expanded deeper underground.">> <<goto "Computer_RealEstate">> <</link>> <<else>> //Expansion Cost: $7,500 Clean Offshore Funds (Insufficient offshore balance)// <</if>> <br><br> <<elseif $basement_level is 2>> <strong>Your Property: Underground Cellar (Level 2)</strong><br> //This property has been fully expanded.// <br><br> <</if>> --- <<link "Close Browser">> <<set $property_result to "">> <<goto "Computer_Main">> <</link>>
<h3>Dark Web - Black Market Armory</h3> The encrypted page loads slowly, displaying high-grade military hardware stolen from private military contractors and corrupt government depots. Shipping is discreet and untraceable. <strong>Your Wallet:</strong> $<<print $money>> <strong>Current Gang Equipment:</strong> <<if $gang_armory is 0>> <span style="color: #ffaa00;">Street Level (Knives, Bats, Cheap Handguns)</span> <<elseif $gang_armory is 1>> <span style="color: #00ffaa;">Tactical (Submachine Guns, Shotguns, Light Vests)</span> <<elseif $gang_armory is 2>> <span style="color: #00aaff;">Heavy (Assault Rifles, Combat Armor)</span> <<elseif $gang_armory is 3>> <span style="color: #aa00ff;">Military Grade (LMGs, Explosives, Full Kevlar)</span> <</if>> <br><hr style="border-color: #444;"><br> /* --- AFFICHAGE DES UPGRADES --- */ <<if $gang_armory is 0>> <div style="background-color: #111; padding: 15px; border-left: 3px solid #00ffaa; margin-bottom: 15px;"> <h4>Crate of Tactical Gear (Tier 1)</h4> Equip your entire roster with reliable submachine guns, pump-action shotguns, and light ballistic vests. Essential for surviving a shootout.<br> <strong>Cost:</strong> $15,000<br><br> <<if $money >= 15000>> <<link "Purchase Tier 1 Shipment">> <<set $money -= 15000>> <<set $gang_armory to 1>> <<goto "DarkWeb_Armory">> <</link>> <<else>> <span style="color: #ff4444;"><em>Insufficient funds.</em></span> <</if>> </div> <<elseif $gang_armory is 1>> <div style="background-color: #111; padding: 15px; border-left: 3px solid #00aaff; margin-bottom: 15px;"> <h4>Assault Rifle Shipment (Tier 2)</h4> Upgrade your men to military-standard assault rifles and heavy combat armor. Gives your gang the firepower to rival local cartels.<br> <strong>Cost:</strong> $45,000<br><br> <<if $money >= 45000>> <<link "Purchase Tier 2 Shipment">> <<set $money -= 45000>> <<set $gang_armory to 2>> <<goto "DarkWeb_Armory">> <</link>> <<else>> <span style="color: #ff4444;"><em>Insufficient funds.</em></span> <</if>> </div> <<elseif $gang_armory is 2>> <div style="background-color: #111; padding: 15px; border-left: 3px solid #aa00ff; margin-bottom: 15px;"> <h4>Military Surplus Container (Tier 3)</h4> The ultimate package. Light machine guns, breaching explosives, and full-body kevlar suits. Your gang will become a paramilitary force.<br> <strong>Cost:</strong> $120,000<br><br> <<if $money >= 120000>> <<link "Purchase Tier 3 Shipment">> <<set $money -= 120000>> <<set $gang_armory to 3>> <<goto "DarkWeb_Armory">> <</link>> <<else>> <span style="color: #ff4444;"><em>Insufficient funds.</em></span> <</if>> </div> <<else>> <div style="padding: 15px; text-align: center; color: #00ffaa; border: 1px solid #00ffaa;"> <em>Your gang is equipped with the best hardware money can buy. The armory has nothing more to offer you.</em> </div> <</if>> <br> <<link "Back to Desktop">><<goto "Computer_Main">><</link>>
<h3>Contract Execution</h3> <<nobr>> /* VÉRIFICATION DU QUARTIER */ <<if $location_attempt isnot $active_job.district>> You spend some time wandering around the <<print $location_attempt>>, checking alleys and faces, but your target is nowhere to be found. You pull up the encrypted app to check the details again. <br><br> <em>The target is located in the <strong><<print $active_job.district>></strong>. You are in the wrong place.</em> <br><br> <<link "Go back to the streets">><<goto $location_attempt>><</link>> /* BON QUARTIER - VÉRIFICATION DE LA STAMINA */ <<elseif $stamina < $active_job.stamina>> You spot your target in the distance, but your body aches. You are too exhausted (Requires <<print $active_job.stamina>> Stamina) to execute this job properly right now. You need to rest first. <br><br> <<link "Retreat into the shadows">><<goto $location_attempt>><</link>> /* TOUT EST BON - EXÉCUTION DU JOB */ <<else>> <<set _oldTime to $time>> <<set $time += $active_job.time>> <<set $stamina -= $active_job.stamina>> <<set _combatTrigger to false>> <<if $active_job.id is "hit">> <<addHeat 8>> <<if random(1, 10) + $intelligence >= 14>> <<set $money += $active_job.reward>> <<if $counters.shadowboard_quests is undefined>><<set $counters.shadowboard_quests to 0>><</if>> <<set $counters.shadowboard_quests += 1>> <<addXP 50>> <div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/combat/assassination.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <strong>Success:</strong> You stalked the target through the <<print $location_attempt>> and eliminated them silently. The crypto payout of <strong>$<<print $active_job.reward>></strong> is transferred instantly. <<else>> <div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/combat/angrywoman.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <strong>Failure:</strong> You made a critical mistake! The target spotted you and pulled a weapon! <<set $enemy to { name: "Armed Target", hp: 45, max_hp: 45, strength: 5 }>> <<set _combatTrigger to true>> <</if>> <<elseif $active_job.id is "drugs">> <<addHeat 4>> <<if random(1, 10) + $charisma >= 12>> <<addXP 20>> <<set $money += $active_job.reward>> <<if $counters.shadowboard_quests is undefined>><<set $counters.shadowboard_quests to 0>><</if>> <<set $counters.shadowboard_quests += 1>> <strong>Success:</strong> You successfully navigated the <<print $location_attempt>>, talked your way out of a police stop, and delivered the package. You earn <strong>$<<print $active_job.reward>></strong>. <<else>> <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;"> <img @src="'images/combat/streetpunkattack' + random(1, 4) + '.jpg'" style="max-width: 100%; max-height: 240px; height: auto; border-radius: 3px;"> </div> <strong>Failure:</strong> A rival gang noticed you moving product on their turf! Defend the package! <<set $enemy to { name: "Rival Thug", hp: 35, max_hp: 35, strength: 4, img: "images/combat/streetpunk" + random(1, 8) + ".jpg" }>> <<set _combatTrigger to true>> <</if>> <<elseif $active_job.id is "debt">> <<addHeat 3>> <<addXP 15>> <<if random(1, 10) + $strength >= 12>> <<set $money += $active_job.reward>> <<if $counters.shadowboard_quests is undefined>><<set $counters.shadowboard_quests to 0>><</if>> <<set $counters.shadowboard_quests += 1>> <div style="border: 2px solid #00ffaa; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;"> <img src="images/combat/extortion.gif" style="max-width: 100%; max-height: 240px; height: auto; border-radius: 3px;"> </div> <strong>Success:</strong> You cornered the gambler in a dirty alley. A few threats and a cracked rib later, he paid up. You take your <strong>$<<print $active_job.reward>></strong> cut. <<else>> <div style="border: 2px solid #ff4444; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;"> <img @src="'images/combat/junkieattack' + random(1, 3) + '.jpg'" style="max-width: 100%; max-height: 240px; height: auto; border-radius: 3px;"> </div> <strong>Failure:</strong> The gambler panicked and swung a heavy pipe at your head! <<set $enemy to { name: "Desperate Debtor", hp: 30, max_hp: 30, strength: 3, img: "images/combat/junkie" + random(1, 6) + ".jpg" }>> <<set _combatTrigger to true>> <</if>> <<elseif $active_job.id is "car">> /* On sauvegarde la récompense et le lieu de manière sécurisée */ <<set $hotwire_context to "darkweb">> <<set $hotwire_reward to $active_job.reward>> <<set $hotwire_location to $location_attempt>> <<goto "Minigame_Hotwire">> <<elseif $active_job.id is "blackmail">> /* Jet de Charisme pour séduire la cible (Difficulté : 14) */ <<addHeat 4>> <<addXP 25>> <<if random(1, 10) + $charisma >= 14>> <<set $money += $active_job.reward>> <<if $counters.shadowboard_quests is undefined>><<set $counters.shadowboard_quests to 0>><</if>> <<set $counters.shadowboard_quests += 1>> <<set $sex_eth to either("white", "asian", "black")>> <<set $sex_action to either("AN", "VG", "BJ", "SHOWER")>> /* Le jeu va chercher tout seul la bonne limite dans StoryInit ! */ <<set _max_images to setup.sex_limits[$sex_eth][$sex_action]>> <<set _chemin to "images/Sex/" + $sex_eth + "/" + $sex_action + "/">> <<set _min_img to ($sex_eth is "asian" and $sex_action is "VG" ? 1 : 0)>> <<randomImage _chemin _max_images _min_img>> <strong>Success:</strong> You met the target at a bar in the <<print $location_attempt>>, smoothly charmed your way into her private room, and successfully recorded your encounter with the hidden camera. The compromising footage is uploaded, and you receive <strong>$<<print $active_job.reward>></strong>. <<else>> <strong>Failure:</strong> You came on too aggressively. The target realized she was being played and started screaming for help. Her private security burst into the room! <<set $enemy to { name: "Angry Bodyguard", hp: 40, max_hp: 40, strength: 4 }>> <<set _combatTrigger to true>> <</if>> <</if>> /* FIN DE LA RÉSOLUTION */ <br><br> --- /* On efface le job de la mémoire puisqu'il est terminé (ou qu'on part au combat) */ <<set $active_job to null>> <<if _combatTrigger is true>> <<set $current_location to $location_attempt>> <<link "Fight!">><<goto "Combat_Main">><</link>> <<else>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<link "Continue">><<goto "Pass_Out">><</link>> <<else>> <<link "Leave the scene">><<goto $location_attempt>><</link>> <</if>> <</if>> <</if>> <</nobr>>
<h3>DarkNet - Genesis Real Estate</h3> The screen flickers with heavily encrypted routing. This hidden marketplace specializes in anonymous commercial property acquisitions and untraceable deeds. All commercial deeds require <strong>Clean Offshore Funds</strong> wired through shell accounts. <strong>Clean Offshore Balance:</strong> <span style="color: #00ffaa;">$<<print $laundered_money>></span> | <strong>Street Wallet (Unwashed):</strong> <span style="color: #888;">$<<print $money>></span> <br><br> /* --- 1. THE ABANDONED WAREHOUSE (STREAMING HANGAR) --- */ <div style="background-color: #111; padding: 15px; border-left: 4px solid #00aaff; margin-bottom: 20px;"> <h4>The Warehouse (Streaming Hub)</h4> A discrete, soundproofed industrial space perfect for setting up a massive streaming operation. Low risk, steady income.<br><br> <<if $empire_properties.hangar.owned is false>> <strong>Price:</strong> $15,000 Offshore<br> <strong>Base Capacity:</strong> 10 Stations<br><br> <<if $laundered_money >= 15000>> <<link "Purchase Property ($15,000 Offshore)">> <<set $laundered_money -= 15000>> <<set $empire_properties.hangar.owned to true>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #ff4444;"><em>Insufficient Clean Offshore Funds ($15,000 required). Launder street cash at Apex Management on the Neon Strip.</em></span> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[Owned & Operational]</strong></span><br> <strong>Current Capacity:</strong> <<print $empire_properties.hangar.capacity>> Stations<br> /* Le coût augmente à chaque niveau */ <<set _upgradeCost to $empire_properties.hangar.level * 10000>> <br> <<if $laundered_money >= _upgradeCost>> <<link "Upgrade Capacity (+5 Stations) - $<<print _upgradeCost>> Offshore">> <<set $laundered_money -= _upgradeCost>> <<set $empire_properties.hangar.capacity += 5>> <<set $empire_properties.hangar.level += 1>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #ff4444;"><em>Capacity upgrade requires $<<print _upgradeCost>> in Clean Offshore Funds.</em></span> <</if>> <</if>> </div> /* --- 2. THE BROTHEL --- */ <div style="background-color: #111; padding: 15px; border-left: 4px solid #ff0055; margin-bottom: 20px;"> <h4>The Velvet Rose (Brothel)</h4> A high-end establishment requiring extensive renovations. High yield, but highly illegal without political cover.<br><br> <<if $empire_properties.brothel.owned is false>> <strong>Price:</strong> $50,000 Offshore<br> <strong>Base Capacity:</strong> 5 Rooms<br><br> <<if $empire_properties.brothel.lobbying_done is false>> <span style="color: #ffaa00;"><em>Purchase Locked: You must secure protection from City Hall or Apex Management before establishing this operation.</em></span> <<else>> <<if $laundered_money >= 50000>> <<link "Purchase Property ($50,000 Offshore)">> <<set $laundered_money -= 50000>> <<set $empire_properties.brothel.owned to true>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #ff4444;"><em>Insufficient Clean Offshore Funds ($50,000 required).</em></span> <</if>> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[Owned & Operational]</strong></span><br> <strong>Current Capacity:</strong> <<print $empire_properties.brothel.capacity>> Rooms<br> <<set _upgradeCost to $empire_properties.brothel.level * 20000>> <br> <<if $laundered_money >= _upgradeCost>> <<link "Upgrade Capacity (+2 Rooms) - $<<print _upgradeCost>> Offshore">> <<set $laundered_money -= _upgradeCost>> <<set $empire_properties.brothel.capacity += 2>> <<set $empire_properties.brothel.level += 1>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #ff4444;"><em>Capacity upgrade requires $<<print _upgradeCost>> in Clean Offshore Funds.</em></span> <</if>> <</if>> </div> /* --- 3. THE ESCORT AGENCY --- */ <div style="background-color: #111; padding: 15px; border-left: 4px solid #ffd700; margin-bottom: 20px;"> <h4>Luxury Escort Platform</h4> An encrypted, invite-only digital platform connecting elite clients with premium companions. Astronomical yields.<br><br> <<if $empire_properties.escort.owned is false>> <strong>Price:</strong> $100,000 Offshore<br> <strong>Base Capacity:</strong> 3 VIP Profiles<br><br> <<if $laundered_money >= 100000>> <<link "Purchase Platform ($100,000 Offshore)">> <<set $laundered_money -= 100000>> <<set $empire_properties.escort.owned to true>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #ff4444;"><em>Insufficient Clean Offshore Funds ($100,000 required).</em></span> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[Owned & Operational]</strong></span><br> <strong>Current Capacity:</strong> <<print $empire_properties.escort.capacity>> VIP Profiles<br> <<set _upgradeCost to $empire_properties.escort.level * 35000>> <br> <<if $laundered_money >= _upgradeCost>> <<link "Upgrade Server Capacity (+1 Profile) - $<<print _upgradeCost>> Offshore">> <<set $laundered_money -= _upgradeCost>> <<set $empire_properties.escort.capacity += 1>> <<set $empire_properties.escort.level += 1>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #ff4444;"><em>Capacity upgrade requires $<<print _upgradeCost>> in Clean Offshore Funds.</em></span> <</if>> <</if>> </div> /* --- 4. THE INDUSTRIAL CHEMICAL LAB (PORT) --- */ <div style="background-color: #111; padding: 15px; border-left: 4px solid #00e5ff; margin-bottom: 20px;"> <h4>Industrial Chemical Lab (Port Wharf)</h4> A heavy-duty marine warehouse bay equipped with industrial 3-phase power, ventilation scrubbers, and private deepwater boat mooring. Clandestine synthesis, rotary pill press, and wholesale export.<br><br> <<if $empire_properties && $empire_properties.chemlab && $empire_properties.chemlab.owned is true>> <span style="color: #00ffaa;"><strong>[ Owned Outright — Anonymous Bearer Deed Secured ]</strong></span><br> <strong>Facilities:</strong> Hydraulic Rotary Pill Press, Cutting Vats, Direct Dock Loading Bay.<br> [[🏭 Visit Chemical Lab|Property_ChemLab]] <<elseif $empire_properties && $empire_properties.chemlab && $empire_properties.chemlab.rented is true>> <span style="color: #00e5ff;"><strong>[ Currently Leased via DarkNet Escrow ($5,000/week) ]</strong></span><br><br> <<if $laundered_money >= 150000>> <<link "[ 🏛️ Buy Out Deed from Offshore Trust ($150,000 Offshore) ]">> <<set $laundered_money -= 150000>> <<set $empire_properties.chemlab.rented to false>> <<set $empire_properties.chemlab.owned to true>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #888;"><em>(Buyout requires $150,000 in Clean Offshore Funds)</em></span> <</if>> | [[🏭 Visit Chemical Lab|Property_ChemLab]] <<else>> <strong>Security Requirement:</strong> Reputation Level 7<br> <strong>DarkNet Escrow Lease:</strong> <span style="color: #00e5ff;">$5,000 Offshore / week</span> | <strong>Untraceable Deed:</strong> <span style="color: #00ffaa;">$150,000 Offshore</span> <em>($1,200/week property tax)</em><br><br> <<if $rep_level >= 7>> <<if $laundered_money >= 5000>> <<link "[ 🔑 Lease Warehouse Bay ($5,000 Offshore upfront) ]">> <<set $laundered_money -= 5000>> <<set $empire_properties.chemlab.rented to true>> <<goto "DarkWeb_RealEstate">> <</link>> | <<else>> <span style="color: #888;">[ Lease requires $5,000 Offshore ]</span> | <</if>> <<if $laundered_money >= 150000>> <<link "[ 🏛️ Purchase Anonymous Deed ($150,000 Offshore) ]">> <<set $laundered_money -= 150000>> <<set $empire_properties.chemlab.owned to true>> <<goto "DarkWeb_RealEstate">> <</link>> <<else>> <span style="color: #ff4444;"><em>Insufficient Clean Offshore Funds ($150,000 required for deed).</em></span> <</if>> <<else>> <span style="color: #ffaa00;"><em>Access Restricted: Seller requires Underworld Reputation Level 7 before releasing GPS coordinates and keycards.</em></span> <</if>> <</if>> </div> <br>---<br> <<link "Disconnect from DarkNet">> <<goto "Computer_Main">> <</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/work/sell.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Potential Buyer</h3> <<nobr>> A sketchy looking person approaches you. They want to buy <strong>$encounter.qty</strong> hit(s) of <strong>$encounter.drug</strong> from you. They are offering <strong>$ $encounter.price</strong> per unit (Total: $ <<print $encounter.qty * $encounter.price>>). <<if $encounter.negotiated is false>> <strong>Negotiation Options:</strong><br> <<link "Threaten them (Needs Strength)">> <<set $encounter.negotiated to true>> <<if $strength >= random(1, 10)>> <<set $encounter.price to Math.floor($encounter.price * 1.3)>> <<goto "Drug_Buyer_Success">> <<else>> <<goto "Drug_Buyer_Fail">> <</if>> <</link>><br> <<link "Scam them (Needs Intelligence)">> <<set $encounter.negotiated to true>> <<if $intelligence >= random(1, 10)>> <<set $encounter.price to Math.floor($encounter.price * 1.3)>> <<goto "Drug_Buyer_Success">> <<else>> <<goto "Drug_Buyer_Fail">> <</if>> <</link>><br> <<link "Persuade them (Needs Charisma)">> <<set $encounter.negotiated to true>> <<if $charisma >= random(1, 10)>> <<set $encounter.price to Math.floor($encounter.price * 1.3)>> <<goto "Drug_Buyer_Success">> <<else>> <<goto "Drug_Buyer_Fail">> <</if>> <</link>><br><br> <</if>> <<link "Sell at current price">> <<set $money += ($encounter.qty * $encounter.price)>> <<set $inventory[$encounter.drug] -= $encounter.qty>> <<addHeat 2>> <<goto $current_location>> <</link>><br> <</nobr>> <<link "Refuse and leave">><<goto $current_location>><</link>>
<h3>Failed!</h3> They don't buy your act. In fact, they get offended and walk away. The deal is off. <<link "Leave">><<goto $current_location>><</link>>
<h3>Success!</h3> Your tactic worked. They look nervous but agree to pay more. The new price is <strong>$ $encounter.price</strong> per unit (Total: $ <<print $encounter.qty * $encounter.price>>). <<link "Sell the drugs">> <<addXP 10>> <<addHeat 2>> <<set _dMult to ($traits.dealer_3 is true ? 1.50 : ($traits.dealer_2 is true ? 1.30 : ($traits.dealer_1 is true ? 1.15 : 1.0)))>> <<set _dealEarned to Math.floor(($encounter.qty * $encounter.price) * _dMult)>> <<set $money += _dealEarned>> <<set $inventory[$encounter.drug] -= $encounter.qty>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + $encounter.qty>> <<goto $current_location>> <</link>><br><br> <<link "Refuse and leave">><<goto $current_location>><</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/work/sell.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Drug Deal</h3> <<nobr>> You find a dealer hanging around. They are offering <strong>$encounter.qty</strong> hit(s) of <strong>$encounter.drug</strong>.<br> They want <strong>$ $encounter.price</strong> per unit (Total: $ <<print $encounter.qty * $encounter.price>>).<br> <strong>Your Wallet:</strong> $ $money <br> <<if $money >= ($encounter.qty * $encounter.price)>> <<link "Buy the stash">> <<set $money -= ($encounter.qty * $encounter.price)>> <<set $inventory[$encounter.drug] += $encounter.qty>> <<set $market[$encounter.drug].qty -= $encounter.qty>> <<set $counters.drugs_bought += $encounter.qty>> <<goto $current_location>> <</link>> <br><br> <</if>> <</nobr>> <<link "Leave">><<goto $current_location>><</link>>
<h3>Nothing here</h3> You wander the streets for 10 minutes, but it's completely dry. Nobody is selling right now. <<link "Leave">><<goto $current_location>><</link>>
<<set $encounter to { negotiated: false }>> /* 1 = Vendeur, 2 = Acheteur */ <<set $encounter.type to random(1, 2)>> /* On liste les drogues que le joueur possède actuellement */ <<set _ownedDrugs to []>> <<if $inventory.weed > 0>><<run _ownedDrugs.push("weed")>><</if>> <<if $inventory.cocaine > 0>><<run _ownedDrugs.push("cocaine")>><</if>> <<if $inventory.ecstasy > 0>><<run _ownedDrugs.push("ecstasy")>><</if>> <<if $inventory.crack > 0>><<run _ownedDrugs.push("crack")>><</if>> <<if $inventory.heroin > 0>><<run _ownedDrugs.push("heroin")>><</if>> /* Si le joueur a les poches vides, on force un vendeur */ <<if _ownedDrugs.length is 0>> <<set $encounter.type to 1>> <</if>> <<if $encounter.type is 1>> /* LOGIQUE DU VENDEUR */ <<set _allDrugs to ["weed", "cocaine", "ecstasy", "crack", "heroin"]>> <<set $encounter.drug to _allDrugs[random(0, 4)]>> <<set _market to $market[$encounter.drug]>> /* Si le marché local a du stock */ <<if _market.qty > 0>> /* EFFET BULK BUYER : Le vendeur propose des lots beaucoup plus importants */ <<if $traits.bulk_buyer is true>> <<set _maxOffer to Math.min(15, _market.qty)>> <<set _minOffer to Math.min(5, _maxOffer)>> <<set $encounter.qty to random(_minOffer, _maxOffer)>> <<else>> <<set $encounter.qty to random(1, Math.min(5, _market.qty))>> <</if>> <<set $encounter.price to _market.price>> <<goto "Drug_Dealer">> <<else>> <<goto "Drug_Empty">> <</if>> <<else>> /* LOGIQUE DE L'ACHETEUR */ /* Il demande une drogue que le joueur a SUR LUI */ <<set $encounter.drug to _ownedDrugs[random(0, _ownedDrugs.length - 1)]>> <<set _market to $market[$encounter.drug]>> /* Il veut entre 1 dose et tout le stock du joueur */ <<set $encounter.qty to random(1, $inventory[$encounter.drug])>> /* Son prix de base oscille de -10% à +10% autour du prix de revente local */ <<set _variance to random(-10, 10) / 100>> <<set $encounter.price to Math.floor(_market.sell * (1 + _variance))>> <<if $encounter.price < 1>><<set $encounter.price to 1>><</if>> <<goto "Drug_Buyer">> <</if>>
<<nobr>> <<updateMarket>> <div style="max-width: 750px; margin: 0 auto;"> <div style="border: 2px solid #555; padding: 5px; text-align: center; margin-bottom: 15px; background-color: #111; border-radius: 5px;"> <img src="images/Sex/work/sell.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>💊 Street Narcotics Hub — <<print $current_location.toUpperFirst()>></h3> <<if $drug_market_log isnot undefined and $drug_market_log isnot "">> <div style="background: rgba(0, 255, 170, 0.12); border-left: 4px solid #00ffaa; padding: 10px; margin-bottom: 15px; border-radius: 4px;"> $drug_market_log </div> <<set $drug_market_log to "">> <</if>> <p style="color: #ccc; font-size: 0.92em; margin-bottom: 14px;"> The backstreets and neon-lit alleys of <<print $current_location.toUpperFirst()>> are active. Buy stock from local street pushers to flip for early cash, or take your product directly to a corner to run a full dealing shift. </p> <!-- Stash & Wallet Overview --> <div style="background: #161b22; border: 1px solid #30363d; border-radius: 6px; padding: 12px; margin-bottom: 16px;"> <div style="display: flex; justify-content: space-between; border-bottom: 1px solid #21262d; padding-bottom: 8px; margin-bottom: 8px;"> <span>💵 <strong>Your Cash:</strong> <span style="color: #00ffaa;">$<<print $money>></span></span> <span>🔥 <strong>Current Heat:</strong> <span style="color: #ff5555;"><<print $heat>>%</span></span> </div> <strong>Your Pocket Stash:</strong><br> <span style="font-size: 0.9em; color: #aaa;"> 🌿 Weed: <strong><<print $inventory.weed>></strong> | ❄️ Coke: <strong><<print $inventory.cocaine>></strong> | 💊 Ecstasy: <strong><<print $inventory.ecstasy>></strong> | 🪨 Crack: <strong><<print $inventory.crack>></strong> | 💉 Heroin: <strong><<print $inventory.heroin>></strong> </span> </div> <!-- Section 1: Buy from Local Street Pushers (Day-One Flipping) --> <div style="background: #121820; border-left: 4px solid #00ffaa; padding: 14px; border-radius: 6px; margin-bottom: 18px;"> <h4 style="margin: 0 0 8px 0; color: #00ffaa;">🛒 Local Street Pushers — Buy Stock to Flip</h4> <p style="margin: 0 0 12px 0; color: #bbb; font-size: 0.88em;"> Low-level pushers are standing on the corner. You can buy individual hits or bundles at local rates and immediately turn around and flip them for a markup! </p> <<set _drugsList to [ { id: "weed", name: "Weed (Bud)", icon: "🌿" }, { id: "cocaine", name: "Cocaine (Powder)", icon: "❄️" }, { id: "ecstasy", name: "Ecstasy (Pill)", icon: "💊" }, { id: "crack", name: "Crack (Rock)", icon: "🪨" }, { id: "heroin", name: "Heroin (Hit)", icon: "💉" } ]>> <div style="display: flex; flex-direction: column; gap: 8px;"> <<for _d to 0; _d < _drugsList.length; _d++>> <<set _info to _drugsList[_d]>> <<set _m to $market[_info.id]>> <<set _buyP to _m.price>> <<set _sellP to _m.sell>> <div style="background: #1a222d; padding: 8px 12px; border-radius: 4px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 6px;"> <div> <strong><<print _info.icon>> <<print _info.name>></strong>: <span style="color: #ffd700;">$<<print _buyP>></span> / unit <span style="color: #888; font-size: 0.85em;">(Est. Resell: $<<print _sellP>>)</span> </div> <div style="display: flex; gap: 6px; flex-wrap: wrap;"> <<if $money >= _buyP>> <<capture _info, _buyP>> <<link "[ Buy 1x ]">> <<set $money -= _buyP>> <<set $inventory[_info.id] += 1>> <<set $counters.drugs_bought += 1>> <<set $drug_market_log to "Bought 1x " + _info.name + " for $" + _buyP + ". Ready to flip!">> <<goto "Drug_Market">> <</link>> <</capture>> <<else>> <span style="color: #666; font-size: 0.85em;">[ Buy 1x ]</span> <</if>> <<if $money >= (_buyP * 3)>> <<capture _info, _buyP>> <<link "[ Buy 3x ]">> <<set $money -= (_buyP * 3)>> <<set $inventory[_info.id] += 3>> <<set $counters.drugs_bought += 3>> <<set $drug_market_log to "Bought 3x " + _info.name + " bundle for $" + (_buyP * 3) + ".">> <<goto "Drug_Market">> <</link>> <</capture>> <</if>> <<if $money >= (_buyP * 5)>> <<capture _info, _buyP>> <<link "[ Buy 5x ]">> <<set $money -= (_buyP * 5)>> <<set $inventory[_info.id] += 5>> <<set $counters.drugs_bought += 5>> <<set $drug_market_log to "Bought 5x " + _info.name + " pack for $" + (_buyP * 5) + ".">> <<goto "Drug_Market">> <</link>> <</capture>> <</if>> </div> </div> <</for>> </div> </div> <!-- Section 2: "Work the Corner" Active Shift Engine --> <<set _hasAnyDrugs to ($inventory.weed > 0 or $inventory.cocaine > 0 or $inventory.ecstasy > 0 or $inventory.crack > 0 or $inventory.heroin > 0)>> <div style="background: #18141e; border-left: 4px solid #ff0077; padding: 14px; border-radius: 6px; margin-bottom: 18px;"> <h4 style="margin: 0 0 8px 0; color: #ff0077;">🔥 Work the Corner — Active Dealing Shift</h4> <p style="margin: 0 0 12px 0; color: #bbb; font-size: 0.88em;"> Post up on a street corner, back-alley, or venue entrance. Walk the block, serve local fiends, negotiate payouts, and handle high-risk street events — including cash-strapped clients offering quickies in exchange for product! </p> <<if _hasAnyDrugs>> <div style="display: flex; gap: 10px; flex-wrap: wrap; justify-content: center;"> <<link "[ 🏃♂️ Quick Corner Hustle (30 mins | 3 Encounters) ]">> <<set $corner_shift to { district: $current_location, total_steps: 3, event_step: 1, time_spent: 30, cash_earned: 0, drugs_sold: { weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }, quickies_taken: 0, heat_generated: 0, xp_earned: 0, resolved: false, active_event: null }>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 💼 Standard Corner Shift (1 Hour | 5 Encounters) ]">> <<set $corner_shift to { district: $current_location, total_steps: 5, event_step: 1, time_spent: 60, cash_earned: 0, drugs_sold: { weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }, quickies_taken: 0, heat_generated: 0, xp_earned: 0, resolved: false, active_event: null }>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 🔥 Heavy Block Lockdown (2 Hours | 8 Encounters) ]">> <<set $corner_shift to { district: $current_location, total_steps: 8, event_step: 1, time_spent: 120, cash_earned: 0, drugs_sold: { weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }, quickies_taken: 0, heat_generated: 0, xp_earned: 0, resolved: false, active_event: null }>> <<goto "Drug_Corner_Shift">> <</link>> </div> <<else>> <div style="color: #ffaa00; font-size: 0.9em; text-align: center; padding: 8px; background: rgba(255, 170, 0, 0.1); border-radius: 4px;"> ⚠️ <em>Your pockets are empty. Buy some product from the pushers above to start dealing on the corner!</em> </div> <</if>> </div> <!-- Section 3: Single Quick Deal & Navigation --> <div style="display: flex; justify-content: space-between; align-items: center; border-top: 1px solid #333; padding-top: 14px;"> <<link "⚡ Single Fast Encounter (10 mins)">> <<set $time += 10>> <<goto "Drug_Encounter">> <</link>> <<link "↩️ Leave Corner">> <<goto $current_location>> <</link>> </div> </div> <</nobr>>
<<nobr>> <div style="max-width: 750px; margin: 0 auto;"> <!-- Shift Status Bar --> <div style="background: #111; border: 1px solid #333; padding: 10px 14px; border-radius: 6px; margin-bottom: 14px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;"> <span>📍 <strong>Corner:</strong> <span style="color: #00e5ff;"><<print $corner_shift.district.toUpperFirst()>></span></span> <span>⏱️ <strong>Customer:</strong> <span style="color: #ffd700;"><<print $corner_shift.event_step>></span> / <<print $corner_shift.total_steps>></span> <span>💵 <strong>Shift Payout:</strong> <span style="color: #00ffaa;">+$<<print $corner_shift.cash_earned>></span></span> <span>🔥 <strong>Heat:</strong> <span style="color: #ff5555;">+<<print $corner_shift.heat_generated>>%</span></span> </div> <!-- Check if player still has drugs --> <<set _avail to []>> <<if $inventory.weed > 0>><<run _avail.push("weed")>><</if>> <<if $inventory.cocaine > 0>><<run _avail.push("cocaine")>><</if>> <<if $inventory.ecstasy > 0>><<run _avail.push("ecstasy")>><</if>> <<if $inventory.crack > 0>><<run _avail.push("crack")>><</if>> <<if $inventory.heroin > 0>><<run _avail.push("heroin")>><</if>> <<if _avail.length is 0 and !$corner_shift.resolved>> <div style="background: rgba(255, 170, 0, 0.15); border-left: 4px solid #ffaa00; padding: 14px; border-radius: 6px; margin-bottom: 15px;"> <h4 style="margin: 0 0 8px 0; color: #ffaa00;">📦 Stash Depleted!</h4> You have completely sold out of every single dose in your pockets! Your customers disperse as word gets around that your stash is empty. </div> <<link "[ Wrap Up Shift & Pocket Earnings ]">> <<goto "Drug_Corner_Summary">> <</link>> <<elseif !$corner_shift.resolved>> <!-- GENERATE NEW EVENT --> <<set _roll to random(1, 100)>> <<set _chosenDrug to _avail.random()>> <<set _marketSell to $market[_chosenDrug].sell>> <<if _marketSell < 1>><<set _marketSell to 5>><</if>> <<if _roll <= 35>> <!-- 1. REGULAR BUYER (35%) --> <<set _reqQty to Math.min($inventory[_chosenDrug], random(1, 3))>> <<set _basePay to _reqQty * _marketSell>> <<set $corner_shift.active_event to { type: "buyer", drug: _chosenDrug, qty: _reqQty, base_pay: _basePay }>> <<elseif _roll <= 60>> <!-- 2. QUICKIE TRADE-OFF (25%) --> <<set $corner_shift.active_event to { type: "quickie", drug: _chosenDrug }>> <<elseif _roll <= 75>> <!-- 3. UNDERCOVER VICE STING (15%) --> <<set $corner_shift.active_event to { type: "undercover", drug: _chosenDrug }>> <<elseif _roll <= 88>> <!-- 4. FIEND SNATCH ATTEMPT (13%) --> <<set $corner_shift.active_event to { type: "snatch", drug: _chosenDrug }>> <<else>> <!-- 5. HIGH-ROLLER PARTY RUSH (12%) --> <<set _bulkQty to Math.min($inventory[_chosenDrug], random(2, 4))>> <<set _bulkPay to Math.floor(_bulkQty * _marketSell * 1.35)>> <<set $corner_shift.active_event to { type: "highroller", drug: _chosenDrug, qty: _bulkQty, pay: _bulkPay }>> <</if>> <</if>> <!-- RENDER ACTIVE EVENT (UNRESOLVED) --> <<if !$corner_shift.resolved>> <<set _ev to $corner_shift.active_event>> /* --- CAS 1 : ACHETEUR RÉGULIER --- */ <<if _ev.type is "buyer">> <<set _dMult to ($traits.dealer_3 is true ? 1.50 : ($traits.dealer_2 is true ? 1.30 : ($traits.dealer_1 is true ? 1.15 : 1.0)))>> <<set _hMult to ($traits.dealer_3 is true ? 0.50 : ($traits.dealer_2 is true ? 0.65 : ($traits.dealer_1 is true ? 0.80 : 1.0)))>> <<set _actualPay to Math.floor(_ev.base_pay * _dMult)>> <<set _bonusPay to Math.floor(_ev.base_pay * 1.3 * _dMult)>> <<set _baseHeat to Math.max(1, Math.round(1 * _hMult))>> <<set _extraHeat to Math.max(1, Math.round(2 * _hMult))>> <div style="background: #161b22; border-left: 4px solid #00ffaa; padding: 14px; border-radius: 6px; margin-bottom: 16px;"> <h4 style="margin: 0 0 6px 0; color: #00ffaa;">👤 Corner Customer <<if $traits.dealer_1 is true>><span style="font-size:0.8em; color:#ffd700;">(Perk Boosted)</span><</if>></h4> <p style="margin: 0 0 10px 0; color: #ddd; font-size: 0.92em;"> A local walks up to you with cash in hand. <em>"Got that <<print _ev.drug>>? Need <<print _ev.qty>> hit(s) right now."</em><br> They are offering: <strong style="color:#00ffaa;">$<<print _actualPay>></strong> ($<<print Math.floor(_actualPay / _ev.qty)>> / unit)<<if _dMult > 1>> <span style="color:#ffd700;">(+<<print Math.round((_dMult - 1) * 100)>>% margin)</span><</if>>. </p> <div style="display: flex; flex-direction: column; gap: 8px;"> <<link `"[ 💵 Sell for $" + _actualPay + " ]"`>> <<set $inventory[_ev.drug] -= _ev.qty>> <<set $corner_shift.drugs_sold[_ev.drug] += _ev.qty>> <<set $corner_shift.cash_earned += _actualPay>> <<set $corner_shift.xp_earned += 10>> <<set $corner_shift.heat_generated += _baseHeat>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "You discreetly pass the " + _ev.qty + "x " + _ev.drug + " into their palm. They slip you $" + _actualPay + " and quickly walk away into the crowd.">> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 💥 Intimidate & Squeeze for Extra ($" + _bonusPay + ") — Strength ]">> <<if $strength >= random(1, 10)>> <<set $inventory[_ev.drug] -= _ev.qty>> <<set $corner_shift.drugs_sold[_ev.drug] += _ev.qty>> <<set $corner_shift.cash_earned += _bonusPay>> <<set $corner_shift.xp_earned += 20>> <<set $corner_shift.heat_generated += _extraHeat>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#00ffaa;'>✔ Intimidation Success:</span> You lean in close with a cold, menacing glare. Nervous, they frantically dig out extra crumpled bills and hand over $" + _bonusPay + "!">> <<else>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#ff5555;'>✖ Intimidation Failed:</span> They scoff at your aggression, shake their head, and walk away. Deal lost.">> <</if>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 🧠 Short-Count & Hustle ($" + _bonusPay + ") — Intelligence ]">> <<if $intelligence >= random(1, 10)>> <<set $inventory[_ev.drug] -= _ev.qty>> <<set $corner_shift.drugs_sold[_ev.drug] += _ev.qty>> <<set $corner_shift.cash_earned += _bonusPay>> <<set $corner_shift.xp_earned += 20>> <<set $corner_shift.heat_generated += _baseHeat>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#00ffaa;'>✔ Hustle Success:</span> You use sleight of hand to make the dose look bigger than it is. They eagerly hand over $" + _bonusPay + " without noticing!">> <<else>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#ff5555;'>✖ Hustle Failed:</span> They inspect the baggie closely and realize it looks light. 'You think I'm stupid?' They curse and storm off.">> <</if>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 💎 Sweet-Talk for a Generous Tip ($" + _bonusPay + ") — Charisma ]">> <<if $charisma >= random(1, 10)>> <<set $inventory[_ev.drug] -= _ev.qty>> <<set $corner_shift.drugs_sold[_ev.drug] += _ev.qty>> <<set $corner_shift.cash_earned += _bonusPay>> <<set $corner_shift.xp_earned += 20>> <<set $corner_shift.heat_generated += _baseHeat>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#00ffaa;'>✔ Charisma Success:</span> Your smooth charm puts them at total ease. They smile and hand over $" + _bonusPay + " as a solid tip!">> <<else>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#ffaa00;'>✖ Refused Tip:</span> Your pitch didn't sway them, and they decided to hold onto their cash and leave.">> <</if>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 🚫 Refuse Deal & Wait ]">> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "You wave them off and wait for the next customer.">> <<goto "Drug_Corner_Shift">> <</link>> </div> </div> /* --- CAS 2 : ÉCHANGE SEXUEL / QUICKIE (25%) --- */ <<elseif _ev.type is "quickie">> <div style="background: #20111a; border-left: 4px solid #ff0077; padding: 14px; border-radius: 6px; margin-bottom: 16px;"> <h4 style="margin: 0 0 6px 0; color: #ff0077;">💋 Street Trade Proposal — 'A Quickie for a Hit'</h4> <p style="margin: 0 0 10px 0; color: #ddd; font-size: 0.92em;"> <<if $corner_shift.district is "Financial">> A stylish woman in high heels and a fitted business skirt slips out of the office garage, biting her lip with restless urgency. <em>"Listen to me... my cards are frozen tonight, but I need some <<print _ev.drug>> right now. Step behind the concrete pillar with me... I'll get on my knees and suck you dry if you front me just one hit."</em> <<elseif $corner_shift.district is "Neon">> A gorgeous club girl in fishnets and a crop top wobbles over from the VIP entrance, pressing her soft body against yours with dilated pupils. <em>"Please tell me you have some <<print _ev.drug>>! I lost my purse inside... Take me into the alley behind the dumpsters, pull down your zipper, and use my mouth however you want."</em> <<else>> A pretty young woman steps out of the shadowy alley stairwell, her eyes locked on your pockets. <em>"Hey handsome... I'm dead broke tonight, but I'm dying for some <<print _ev.drug>>. Come behind the fire escape with me. I'll take it all down my throat right here on the concrete if you give me just one dose."</em> <</if>> </p> <div style="display: flex; flex-direction: column; gap: 8px;"> <<link `"[ 👄 'Deal. Step into the shadows.' (Trade 1x " + _ev.drug + " for Alley Quickie) ]"`>> <<set $inventory[_ev.drug] -= 1>> <<set $corner_shift.drugs_sold[_ev.drug] += 1>> <<set $corner_shift.quickies_taken += 1>> <<set $hp to Math.min($maxhp, $hp + 25)>> <<set $stamina to Math.min($maxstamina, $stamina + 35)>> <<set $corner_shift.xp_earned += 25>> <<set $corner_shift.heat_generated += 1>> <<set $corner_shift.resolved to true>> <<set $corner_shift.quickie_scene to true>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 💵 'Cash only. Scrounge up what you have.' ]">> <<if random(1, 100) <= 65>> <<set _scroungeCash to random(25, 45)>> <<set $inventory[_ev.drug] -= 1>> <<set $corner_shift.drugs_sold[_ev.drug] += 1>> <<set $corner_shift.cash_earned += _scroungeCash>> <<set $corner_shift.xp_earned += 10>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "She sighs, digging frantically through her pockets. She manages to find $" + _scroungeCash + " in crumpled bills. You take the money and hand over the single " + _ev.drug + ".">> <<else>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "She checks her pockets but comes up completely empty. 'You're missing out,' she scoffs, turning and disappearing back into the night.">> <</if>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 🚫 'Not interested. Get lost.' ]">> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "You wave her away coldly. She rolls her eyes and heads down the street.">> <<goto "Drug_Corner_Shift">> <</link>> </div> </div> /* --- CAS 3 : SOUS-COUVERTURE POLICE (15%) --- */ <<elseif _ev.type is "undercover">> <div style="background: #1e1b12; border-left: 4px solid #ffaa00; padding: 14px; border-radius: 6px; margin-bottom: 16px;"> <h4 style="margin: 0 0 6px 0; color: #ffaa00;">⚠️ Suspicious Buyer — Undercover Narc?</h4> <p style="margin: 0 0 10px 0; color: #ddd; font-size: 0.92em;"> A stiff-looking individual in brand-new running shoes walks up. Their posture is rigid and they keep glancing at a black sedan parked down the block. <em>"Hey fellow. I want to buy your entire stash of <<print _ev.drug>>. Who supplies your crew anyway?"</em> </p> <div style="display: flex; flex-direction: column; gap: 8px;"> <<if $traits.dealer_3 is true>> <<link "[ 👑 Kingpin Radar: Call Out the Narc & Walk Away Clean ]">> <<set $corner_shift.xp_earned += 35>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#ffd700;'>👑 Cartel Kingpin Intuition:</span> You laugh in the undercover officer's face before they even finish their pitch. 'Nice department-issued sneakers, Detective. Tell Captain Vance I said hello.' Flustered and exposed, the narc retreats to their unmarked cruiser in disgrace (+35 XP).">> <<goto "Drug_Corner_Shift">> <</link>> <</if>> <<link "[ 🧠 Inspect Them for a Hidden Wire (Intelligence) ]">> <<if $intelligence >= random(1, 10)>> <<set $corner_shift.xp_earned += 25>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#00ffaa;'>✔ Wire Spotted:</span> You spot the tiny microphone collar pin beneath their jacket. You smirk, put your hands in your pockets, and reply, 'I only sell chewing gum, officer.' They curse under their breath and back off (+25 XP).">> <<else>> <<set $inventory[_ev.drug] -= 1>> <<set $corner_shift.heat_generated += 6>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#ff5555;'>✖ Busted by Vice:</span> You pull out the baggie to show them — instantly they flash a gold badge! You manage to wrench free and sprint through the fence, but you lost the product and spiked district heat (+6 Heat).">> <</if>> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 🏃♂️ Bolt Down the Alley Immediately (Agility / Stamina) ]">> <<set $stamina to Math.max(0, $stamina - 15)>> <<set $corner_shift.xp_earned += 15>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "Trusting your street instincts, you sprint down the fire escape alley before they can react. You hear them shouting into their radio, but you easily lose them in the maze of streets (+15 XP, -15 Stamina).">> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 🚫 Play It Cool: 'I don't know what you're talking about.' ]">> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "You look at them blankly and shake your head. Frustrated that you didn't bite, the undercover cop walks back toward the unmarked car.">> <<goto "Drug_Corner_Shift">> <</link>> </div> </div> /* --- CAS 4 : TENTATIVE DE VOL / AGRESSION (13%) --- */ <<elseif _ev.type is "snatch">> <div style="background: #221212; border-left: 4px solid #ff3333; padding: 14px; border-radius: 6px; margin-bottom: 16px;"> <h4 style="margin: 0 0 6px 0; color: #ff3333;">🚨 Stick-Up Attempt — Corner Snatcher!</h4> <p style="margin: 0 0 10px 0; color: #ddd; font-size: 0.92em;"> A twitching addict suddenly lunges forward, trying to rip the bag of <<print _ev.drug>> right out of your fingers! </p> <div style="display: flex; flex-direction: column; gap: 8px;"> <<link "[ 👊 Slam Them to the Concrete (Strength) ]">> <<if $strength >= random(1, 10)>> <<set _robCash to random(15, 35)>> <<set $corner_shift.cash_earned += _robCash>> <<set $corner_shift.xp_earned += 25>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#00ffaa;'>✔ Beatdown Delivered:</span> You catch them by the wrist, twist their arm, and slam them face-first into the asphalt. You take back your product and empty their pockets of $" + _robCash + " for wasting your time (+25 XP).">> <<else>> <<set $inventory[_ev.drug] -= 1>> <<set $hp to Math.max(1, $hp - 10)>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#ff5555;'>✖ Snatched:</span> They kick your shin and tear the dose from your grip, disappearing down a narrow storm drain before you can grab them (-1 dose, -10 HP).">> <</if>> <<goto "Drug_Corner_Shift">> <</link>> <<if $active_firearm isnot "none">> <<link "[ 🔫 Draw Your Firearm & Cock the Hammer ]">> <<set $corner_shift.xp_earned += 30>> <<set $corner_shift.heat_generated += 2>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "<span style='color:#00e5ff;'>✔ Armed Deterrent:</span> You whip out your firearm and press the cold steel straight against their forehead. The snatcher freezes in pure terror, drops to their knees, and crawls away weeping (+30 XP, +2 Heat).">> <<goto "Drug_Corner_Shift">> <</link>> <</if>> <<link "[ 🏃♂️ Let Them Run to Avoid a Scene ]">> <<set $inventory[_ev.drug] -= 1>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "You let them scamper off into the darkness with a single dose. Not worth causing a loud riot on this block (-1 dose).">> <<goto "Drug_Corner_Shift">> <</link>> </div> </div> /* --- CAS 5 : GROS CLIENT / PARTY RUSH (12%) --- */ <<elseif _ev.type is "highroller">> <div style="background: #111e1e; border-left: 4px solid #00e5ff; padding: 14px; border-radius: 6px; margin-bottom: 16px;"> <h4 style="margin: 0 0 6px 0; color: #00e5ff;">✨ High-Roller Party Rush — Premium Bulk Sale</h4> <p style="margin: 0 0 10px 0; color: #ddd; font-size: 0.92em;"> A tinted luxury car pulls up to the curb. The driver rolls down the window and waves a fat roll of hundred-dollar bills. <em>"Hosting a private suite party tonight. I need <<print _ev.qty>>x <<print _ev.drug>> right now and I'm paying a heavy tip!"</em><br> They are offering a massive <strong style="color:#00ffaa;">$<<print _ev.pay>></strong> upfront! </p> <div style="display: flex; flex-direction: column; gap: 8px;"> <<link `"[ 💎 Hand Over " + _ev.qty + "x " + _ev.drug + " (+$" + _ev.pay + ") ]"`>> <<set $inventory[_ev.drug] -= _ev.qty>> <<set $corner_shift.drugs_sold[_ev.drug] += _ev.qty>> <<set $corner_shift.cash_earned += _ev.pay>> <<set $corner_shift.xp_earned += 35>> <<set $corner_shift.heat_generated += 1>> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "You toss the bundled packets through the window. The driver smiles, hands you $" + _ev.pay + " without even counting, and speeds off into the night (+35 XP)!">> <<goto "Drug_Corner_Shift">> <</link>> <<link "[ 🚫 Decline Offer ]">> <<set $corner_shift.resolved to true>> <<set $corner_shift.resolve_msg to "You tell them you don't carry that much right now. The car burns rubber and accelerates down the boulevard.">> <<goto "Drug_Corner_Shift">> <</link>> </div> </div> <</if>> <<else>> <!-- RENDER RESOLVED EVENT FEEDBACK --> <<if $corner_shift.quickie_scene is true>> <<set $corner_shift.quickie_scene to false>> <<set _streetPicks to ['images/Sex/street/0.gif', 'images/Sex/street/1.webp', 'images/Sex/street/10.webp', 'images/Sex/street/11.gif', 'images/Sex/street/12.webp', 'images/Sex/street/13.gif', 'images/Sex/street/14.webp', 'images/Sex/street/15.gif', 'images/Sex/street/16.gif', 'images/Sex/street/17.webp', 'images/Sex/street/18.gif', 'images/Sex/street/19.gif', 'images/Sex/street/2.webp', 'images/Sex/street/20.gif', 'images/Sex/street/21.gif', 'images/Sex/street/22.gif', 'images/Sex/street/23.gif', 'images/Sex/street/24.gif', 'images/Sex/street/25.gif', 'images/Sex/street/26.gif', 'images/Sex/street/27.gif', 'images/Sex/street/28.gif', 'images/Sex/street/29.gif', 'images/Sex/street/3.gif', 'images/Sex/street/30.gif', 'images/Sex/street/31.gif', 'images/Sex/street/32.gif', 'images/Sex/street/33.webp', 'images/Sex/street/35.gif', 'images/Sex/street/36.gif', 'images/Sex/street/4.webp', 'images/Sex/street/5.gif', 'images/Sex/street/6.webp', 'images/Sex/street/7.webp', 'images/Sex/street/8.gif', 'images/Sex/street/9.webp']>> <<set _chosenSexImg to _streetPicks.random()>> <div style="background: #20111a; border: 2px solid #ff0077; border-radius: 8px; padding: 12px; text-align: center; margin-bottom: 16px;"> <h4 style="margin: 0 0 10px 0; color: #ff66b2;">💋 Alley Quickie — Product for Pleasure</h4> <img @src="_chosenSexImg" style="max-width: 100%; max-height: 340px; border-radius: 6px; border: 1px solid #ff0077; margin-bottom: 10px;"> <div style="color: #ffb3d9; font-size: 0.9em; text-align: left; line-height: 1.5;"> She leads you into the shadows behind the rusted dumpster, dropping eagerly onto her knees on the cold pavement. She unzips your pants and takes your hardened shaft into her mouth with warm, wet, breathless strokes, moaning around you as she works you toward an intense release. When you finish, she swallows without spilling a drop and smiles up at you, happily pocketing her promised product. <br><br> <span style="color: #00ffaa;"><strong>Encounter Reward:</strong> Restored <strong>+25 HP</strong> & <strong>+35 Stamina</strong>, earned <strong>+25 XP</strong> (<strong>+1 Heat</strong>).</span> </div> </div> <<else>> <div style="background: #161b22; border-left: 4px solid #00e5ff; padding: 14px; border-radius: 6px; margin-bottom: 16px;"> <<print $corner_shift.resolve_msg>> </div> <</if>> <!-- Navigation after resolution --> <div style="display: flex; justify-content: space-between; align-items: center; border-top: 1px solid #333; padding-top: 14px;"> <<if $corner_shift.event_step < $corner_shift.total_steps>> <<link "[ 🏃♂️ Next Customer / Continue Shift ]">> <<set $corner_shift.event_step += 1>> <<set $corner_shift.resolved to false>> <<goto "Drug_Corner_Shift">> <</link>> <<else>> <<link "[ 🏁 Finish Shift & Pocket Earnings ]">> <<goto "Drug_Corner_Summary">> <</link>> <</if>> <<link "Wrap Up Shift Early">> <<goto "Drug_Corner_Summary">> <</link>> </div> <</if>> </div> <</nobr>>
<<nobr>> /* Calcul du temps écoulé */ <<set _oldTime to $time>> <<set $time += $corner_shift.time_spent>> /* Application des gains */ <<set $money += $corner_shift.cash_earned>> <<addHeat $corner_shift.heat_generated>> <<addXP $corner_shift.xp_earned>> <<set _shiftDrugsSold to ($corner_shift.drugs_sold.weed || 0) + ($corner_shift.drugs_sold.cocaine || 0) + ($corner_shift.drugs_sold.ecstasy || 0) + ($corner_shift.drugs_sold.crack || 0) + ($corner_shift.drugs_sold.heroin || 0)>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + _shiftDrugsSold>> <div style="max-width: 650px; margin: 10px auto; background: #0d1117; border: 2px solid #30363d; border-radius: 8px; padding: 16px;"> <h3 style="margin: 0 0 10px 0; color: #00ffaa; text-align: center;">📊 Corner Shift Complete — <<print $corner_shift.district.toUpperFirst()>></h3> <p style="text-align: center; color: #aaa; font-size: 0.9em; margin-bottom: 16px;"> You step away from the corner, checking both directions as you count your cash roll and tuck your remaining stash into your jacket. </p> <div style="background: #161b22; border-radius: 6px; padding: 14px; margin-bottom: 16px;"> <div style="font-size: 1.15em; font-weight: bold; color: #00ffaa; margin-bottom: 10px; border-bottom: 1px solid #21262d; padding-bottom: 6px;"> 💵 Cash Collected: +$<<print $corner_shift.cash_earned>> </div> <div style="color: #ddd; font-size: 0.92em; line-height: 1.6;"> ⏱️ <strong>Shift Duration:</strong> <<print $corner_shift.time_spent>> minutes<br> 📦 <strong>Product Distributed:</strong><br> <span style="font-size: 0.88em; color: #aaa; margin-left: 15px;"> <<if $corner_shift.drugs_sold.weed > 0>>🌿 Weed: <<print $corner_shift.drugs_sold.weed>> hit(s) | <</if>> <<if $corner_shift.drugs_sold.cocaine > 0>>❄️ Coke: <<print $corner_shift.drugs_sold.cocaine>> hit(s) | <</if>> <<if $corner_shift.drugs_sold.ecstasy > 0>>💊 Ecstasy: <<print $corner_shift.drugs_sold.ecstasy>> hit(s) | <</if>> <<if $corner_shift.drugs_sold.crack > 0>>🪨 Crack: <<print $corner_shift.drugs_sold.crack>> hit(s) | <</if>> <<if $corner_shift.drugs_sold.heroin > 0>>💉 Heroin: <<print $corner_shift.drugs_sold.heroin>> hit(s) | <</if>> </span><br> <<if $corner_shift.quickies_taken > 0>> 💋 <strong>Alley Quickies Enjoyed:</strong> <span style="color:#ff66b2;"><<print $corner_shift.quickies_taken>> sexual favor(s)</span><br> <</if>> 🔥 <strong>District Heat Added:</strong> +<<print $corner_shift.heat_generated>>%<br> ⭐ <strong>Street Experience:</strong> +<<print $corner_shift.xp_earned>> XP </div> </div> <div style="display: flex; justify-content: center; gap: 12px; flex-wrap: wrap;"> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<link "⚠️ 4:00 AM Curfew Exceeded — Pass Out">> <<goto "Pass_Out">> <</link>> <<else>> <<link "[ 💊 Hit the Corner Again ]">> <<goto "Drug_Market">> <</link>> <<link `"[ ↩️ Return to " + $corner_shift.district.toUpperFirst() + " Streets ]"`>> <<goto $corner_shift.district>> <</link>> <</if>> </div> </div> <</nobr>>
<<set $time += 30>> /* Le temps qu'elle arrive */ /* Initialisation des variables du moteur */ <<set $sex_eth to "asian">> <<set $sex_action to "TEASE">> <<set $sex_log to "A beautiful escort knocks on your door. She steps in and starts teasing you.">> /* DICTIONNAIRE DES LIMITES D'IMAGES : REMPLACEZ LES CHIFFRES PAR LES VÔTRES ! */ <<goto "Sex_Main">>
<<set $time += 30>> /* Le temps qu'elle arrive */ /* Initialisation des variables du moteur */ <<set $sex_eth to "black">> <<set $sex_action to "TEASE">> <<set $sex_log to "A beautiful escort knocks on your door. She steps in and starts teasing you.">> /* DICTIONNAIRE DES LIMITES D'IMAGES : REMPLACEZ LES CHIFFRES PAR LES VÔTRES ! */ <<goto "Sex_Main">>
<<set $time += 30>> /* Le temps qu'elle arrive */ /* Initialisation des variables du moteur */ <<set $sex_eth to "white">> <<set $sex_action to "TEASE">> <<set $sex_log to "A beautiful escort knocks on your door. She steps in and starts teasing you.">> /* DICTIONNAIRE DES LIMITES D'IMAGES : REMPLACEZ LES CHIFFRES PAR LES VÔTRES ! */ <<goto "Sex_Main">>
<h3>Encrypted Inbox</h3> <strong>From:</strong> unknown_sender@apex-mgmt.net <strong>Subject:</strong> We saw what happened. Let us help. <br><hr style="border-color: #444;"><br> <em>"Greetings, You've been making quite a lot of noise lately. The recent incident was messy. When a boss like you operates in the shadows, the last thing you want is a spotlight. That's what we call 'Heat'. We are <strong>Apex Management</strong>. Officially, we are a public relations and crisis management firm. Unofficially, we make problems disappear for people like you. We bribe the right cops, plant the right stories in the press, and create fake legal businesses to wash your reputation. We have a proposition for you. Come to our office in the Commercial District. Do a few favors for us, and we will make your Heat vanish. Don't let the Feds take your empire down because you were too cheap to buy good PR."</em> <br><br> <span style="color: #00ffaa;"><em>// Apex Management is now available to visit in the Commercial District. You can use them to reduce your Heat. //</em></span> <br><br> <<link "Close Email">> <<set $agency_email_read to true>> <<goto "Computer_Main">> /* Ou le nom de votre passage PC */ <</link>>
<h3>Encrypted Inbox</h3> <strong>From:</strong> logistics@vanguard-sec.corp <strong>Subject:</strong> Tactical Escalation <hr style="border-color: #444;"> "Your current operation exceeds the capacity of street-level suppliers. We are Vanguard Security. We provide military-grade hardware to clients who can afford discretion. Visit our front office in the Financial District." <br><br> <span style="color: #ff4444;">// Vanguard Armory (Tier 2) is now unlocked in the Financial District. //</span> <br><br> <<link "Close Email">> <<set $armory_high_unlocked to true>> <<set $email_armory_high_read to true>> <<goto "Computer_Main">> <</link>>
<h3>Encrypted Inbox</h3> <strong>From:</strong> sales@ironclad-surplus.net <strong>Subject:</strong> Hardware Supply <hr style="border-color: #444;"> "You are making noise. Noise attracts problems. If you want to protect your assets without relying on kitchen knives, come to the pawn shop in the Outskirts. Tell the guy at the counter you need 'heavy-duty camping gear'." <br><br> <span style="color: #ffaa00;">// Ironclad Armory (Tier 1) is now unlocked in the Slums. //</span> <br><br> <<link "Close Email">> <<set $armory_low_unlocked to true>> <<set $email_armory_low_read to true>> <<goto "Computer_Main">> <</link>>
\:: Event_AuctionEmail <h3>Encrypted Inbox</h3> <strong>From:</strong> admin@flesh-market.onion <strong>Subject:</strong> Exclusive Access <hr style="border-color: #444;"> "Your recent acquisition volume has caught our attention. Amateurs flood the streets; professionals use the market. You are hereby granted access to the Underground Auction. Buy premium assets, or liquidate your dead weight. The catalog refreshes weekly. Do not bring police attention to this server." <br><br> <span style="color: #aa00ff;">// The Underground Auction entry can be found in the club's VIP section. //</span> <br><br> <<link "Close Email">> <<set $auction_unlocked to true>> <<set $email_auction_read to true>> <<goto "Computer_Main">> <</link>>
<<nobr>> <div style="background-color: #880000; color: white; padding: 15px; text-align: center; border: 2px solid #ff0000;"> <h2>⚠️ CRITICAL EMERGENCY ⚠️</h2> <<set $black_swan_count += 1>> </div> <br> /* --- CALCULS PRÉLIMINAIRES POUR LES CHOIX --- */ <<set _totalGangStr to 0>> <<set _hasStreetCaptain to false>> <<for _i to 0; _i < $gang_members.length; _i++>> <<set _totalGangStr += $gang_members[_i].strength>> <<if $gang_members[_i].specialty is "Street Captain">><<set _hasStreetCaptain to true>><</if>> <</for>> /* ================================================== */ /* 1. RICO RAID (Descente Fédérale) */ /* ================================================== */ <<if $current_crisis is "rico_raid">> <strong>3:15 AM - Your burner phone rings.</strong><br><br> "Boss! The Feds are here! It's a RICO raid!"<br> The local police were paid off, but the alphabet boys bypass local corruption. They are currently smashing the doors of one of your properties. You have minutes to react before they seize everything and trace the paperwork back to you. <br><br> <strong>Options:</strong><br> <<if $money >= 25000>> <<link "Bribe the Federal Judge ($25,000)">> <<set $money -= 25000>> <<run $morning_notifications.push("<span style='color:#00ffaa;'><strong>Crisis Averted:</strong> You paid the judge. The raid was called off on a 'clerical error'.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> /* Remplacez "Home" par votre passage de réveil habituel */ <</link>><br> <<else>> <span style="color:#555;">[ Not enough money to bribe the judge ($25,000) ]</span><br> <</if>> <<if $gang_members.length > 0>> <<link "Force a gang member to take the fall (Lose 1 Thug)">> <<set _fallGuy to $gang_members[0].name>> <<run $gang_members.deleteAt(0)>> <<run $morning_notifications.push("<span style='color:#ffaa00;'><strong>Crisis Handled:</strong> " + _fallGuy + " took the blame and got arrested. Your property is safe, but you lost a man.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>><br> <</if>> <<link "Do nothing. Let them close the property.">> /* On désactive une propriété au hasard */ <<if $empire_properties.hangar.owned is true>> <<set $empire_properties.hangar.owned to false>> <<run $morning_notifications.push("<span style='color:#ff4444;'><strong>Crisis Failed:</strong> The Feds permanently shut down your Hangar.</span>")>> <<else>> <<set $empire_properties.brothel.owned to false>> <<run $morning_notifications.push("<span style='color:#ff4444;'><strong>Crisis Failed:</strong> The Feds permanently shut down your Brothel.</span>")>> <</if>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>><br> <<link "Take the fall personally to protect your properties (Go to Prison)">> <<unset $current_crisis>> <<goto "Prison_Intake">> <</link>> /* ================================================== */ /* 3. THE BLACKMAILER (Le Maître Chanteur) */ /* ================================================== */ <<elseif $current_crisis is "blackmailer">> <strong>An anonymous encrypted message appears on your phone.</strong><br><br> <em>"I know what you keep in the basement. I have photos of the cells. Send $10,000 to this offshore account in the next 10 minutes, or the police get the folder."</em> <br><br> <strong>Options:</strong><br> <<if $money >= 10000>> <<link "Pay the hush money ($10,000)">> <<set $money -= 10000>> <<run $morning_notifications.push("<span style='color:#00ffaa;'><strong>Crisis Averted:</strong> You paid the blackmailer. The photos were deleted.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>><br> <</if>> <<if _totalGangStr >= 15>> <<link "Send your gang to track and eliminate him">> <<run $morning_notifications.push("<span style='color:#ffaa00;'><strong>Crisis Handled:</strong> Your men tracked the IP and silenced the blackmailer permanently. No money spent.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>><br> <<else>> <span style="color:#555;">[ Gang not strong enough to hunt him down quietly (Need 15+ Str) ]</span><br> <</if>> <<link "Ignore the threat">> <<run $basement_captives.splice(0, $basement_captives.length)>> /* Vide la cave */ <<run $morning_notifications.push("<span style='color:#ff4444;'><strong>CRITICAL HIT:</strong> The police raided your basement! You narrowly escaped, but all your captives were rescued.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>> /* ================================================== */ /* 4. CRYPTO CRASH (Gel Financier) */ /* ================================================== */ <<elseif $current_crisis is "crypto_crash">> <strong>Financial News Alert</strong><br><br> The cryptocurrency exchange platform your empire uses to process payments and launder streaming money has been hacked and frozen by international authorities. <br><br> For the next <strong>4 days</strong>, your Hangar income will be slashed in half as you are forced to use highly taxed and inefficient backup routes. <br><br> <<link "Damn it...">> <<set $crypto_crash_timer to 4>> <<run $morning_notifications.push("<span style='color:#ffaa00;'><strong>Crisis Active:</strong> Crypto Crash in effect. Streaming income reduced by 50% for 4 days.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>> /* ================================================== */ /* 5. SICKNESS (Épidémie dans la cave) */ /* ================================================== */ <<elseif $current_crisis is "sickness">> <strong>A foul smell comes from the basement.</strong><br><br> A severe infection is spreading among your captives. They are burning with fever and barely conscious. If this spreads or worsens, you might have dead bodies on your hands instead of inventory. <br><br> <strong>Options:</strong><br> <<if $money >= 15000>> <<link "Call the Underground Doctor ($15,000)">> <<set $money -= 15000>> <<run $morning_notifications.push("<span style='color:#00ffaa;'><strong>Crisis Averted:</strong> The underground doc gave them antibiotics. Everyone will live.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>><br> <<else>> <span style="color:#555;">[ Not enough money to call the Underground Doctor ($15,000) ]</span><br> <</if>> <<link "Let them fight it off naturally">> <<set _died to false>> <<for _i to $basement_captives.length - 1; _i >= 0; _i-->> /* Baisse massive de discipline */ <<set $basement_captives[_i].discipline = Math.max(0, $basement_captives[_i].discipline - 30)>> /* 30% chance de mourir par fille */ <<if random(1, 100) <= 30>> <<run $basement_captives.deleteAt(_i)>> <<set _died to true>> <</if>> <</for>> <<if _died is true>> <<run $morning_notifications.push("<span style='color:#ff4444;'><strong>Crisis Failed:</strong> Some of your captives died from the infection overnight. The survivors lost all discipline.</span>")>> <<else>> <<run $morning_notifications.push("<span style='color:#ffaa00;'><strong>Crisis Survived:</strong> None of them died, but their willpower is shattered (Discipline -30).</span>")>> <</if>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>> /* ================================================== */ /* 6. DRIVE-BY / TURF WAR */ /* ================================================== */ <<elseif $current_crisis is "drive_by">> <div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/combat/fight2.gif" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <strong>Gunfire echoes through the neon streets.</strong><br><br> A heavily armed rival cartel just did a drive-by shooting on your main strolls! Your girls were out there working when the black SUVs rolled up with automatic weapons. <br><br> /* --- CALCUL DU SCORE DE DÉFENSE --- */ <<set _armory_bonus to ($gang_armory is 1 ? 15 : ($gang_armory is 2 ? 35 : ($gang_armory is 3 ? 60 : 0)))>> <<set _defense_score to _totalGangStr + _armory_bonus>> <<if _hasStreetCaptain is true>><<set _defense_score += 15>><</if>> <!-- DEBUG INVISIBLE : Defense Score = <<print _defense_score>> --> /* --- RÉSOLUTION SELON LE SCORE --- */ <<if _defense_score >= 60>> /* VICTOIRE PARFAITE (Nécessite bon équipement) */ <strong>Security Check Passed! (Defense: Overwhelming)</strong><br> Your men didn't even flinch. Thanks to their heavy firepower and armor, they instantly shredded the cartel SUVs, forcing the survivors to flee. Your girls weren't even scratched. <br><br> <<link "Good work, boys.">> <<run $morning_notifications.push("<span style='color:#00ffaa;'><strong>Crisis Averted:</strong> Your heavily-armed gang annihilated a cartel drive-by. No casualties.</span>")>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>> <<elseif _defense_score >= 30>> /* VICTOIRE À LA PYRRHUS (Hommes blessés/tués, Filles sauvées) */ <strong>Security Check: Barely Passed (Defense: Moderate)</strong><br> Your gang managed to return fire and protect the girls, but they were outgunned. The streets are painted with blood, and your men took serious hits to keep the cartel away from your assets. <br><br> <<link "Assess the casualties">> <<if $gang_members.length > 0>> /* Un membre du gang est tué aléatoirement */ <<set _deadIndex to random(0, $gang_members.length - 1)>> <<set _deadThug to $gang_members[_deadIndex].name>> <<run $gang_members.deleteAt(_deadIndex)>> <<run $morning_notifications.push("<span style='color:#ffaa00;'><strong>Crisis Survived (Heavy Cost):</strong> Your gang repelled the drive-by, but <strong>" + _deadThug + "</strong> was killed in the shootout.</span>")>> <<else>> <<run $morning_notifications.push("<span style='color:#ffaa00;'><strong>Crisis Survived:</strong> The drive-by was repelled, but it was a bloody mess.</span>")>> <</if>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>> <<else>> /* MASSACRE (Pistolets/Mains nues vs Cartel) */ <strong>Security Check Failed! (Defense: Too Weak)</strong><br> It was a complete massacre. Your boys tried to shoot back with cheap pistols, but the cartel's assault rifles tore right through them. Your girls had to dive into alleys to survive, but not all of them made it. <br><br> <<link "Assess the bloodbath">> /* 1. Mort des filles */ <<set _lostGirl to false>> <<for _i to $network_girls.length - 1; _i >= 0; _i-->> <<if $network_girls[_i].location is "street">> /* 40% chance de mourir pour chaque fille dans la rue */ <<if random(1, 100) <= 40>> <<run $network_girls.deleteAt(_i)>> <<set _lostGirl to true>> <<else>> <<set $network_girls[_i].location to "hideout">> <</if>> <</if>> <</for>> /* 2. Mort de membres du gang (jusqu'à 2 morts) */ <<set _deadThugsCount to 0>> <<if $gang_members.length > 0>> <<set _deadIndex to random(0, $gang_members.length - 1)>> <<run $gang_members.deleteAt(_deadIndex)>> <<set _deadThugsCount += 1>> <</if>> <<if $gang_members.length > 0 and random(1, 100) <= 50>> <<set _deadIndex to random(0, $gang_members.length - 1)>> <<run $gang_members.deleteAt(_deadIndex)>> <<set _deadThugsCount += 1>> <</if>> /* Notification du désastre */ <<set _msg to "<span style='color:#ff4444;'><strong>CRITICAL HIT (MASSACRE):</strong> The cartel tore through your weak defenses. ">> <<if _deadThugsCount > 0>> <<set _msg += "You lost " + _deadThugsCount + " gang member(s) in the crossfire. ">> <</if>> <<if _lostGirl is true>> <<set _msg += "Some of your girls were killed, the rest fled to the hideout.</span>">> <<else>> <<set _msg += "Your girls barely survived and fled to the hideout.</span>">> <</if>> <<run $morning_notifications.push(_msg)>> <<unset $current_crisis>><<goto "Wake_Up">> <</link>> <</if>> <</if>> <</nobr>>
The heavy penitentiary doors slam shut behind you, <strong>$name</strong>. You are finally free. You take a deep breath of <strong>$city</strong>'s polluted air. The streets haven't changed. The city is still fractured into different districts, all plagued by rival gangs fighting for control. You are alone. You don't have a gang to watch your back right now. An easy target, or a free agent, depending on how you look at it. As a male ex-convict, your reputation precedes you. Before moving forward, let's get the facts straight. Why were you incarcerated in the first place? [[I hid a stash before the cops caught me. (Theft) ->Question2][$money += 1500]] [[Some guy tested me, so I sent him to the hospital. (Assault) ->Question2][$strength += 1]] [[I scammed some wealthy investors out of their funds. (Fraud) ->Question2][$intelligence += 1]]
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/financial.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <<nobr>> You are in the Financial District. Towering skyscrapers of pristine glass and steel reach up into the sky, reflecting the city's artificial lights. The streets here are impossibly clean and actively patrolled by private security drones. Men and women in sharp suits walk by with purposeful strides, completely ignoring you. <br><br> <<if $player_housing is 2>> <<link "Enter your Luxury Penthouse">><<goto "Home">><</link>> <br> <</if>> [[Enter the Grand Mall|Financial_Mall]]<br> [[Enter the Bank|Financial_Bank]]<br> [[Neon Motors Luxury|Financial_Dealership]]<br> [[Dynasty Real Estate|Location_RealEstateAgency]]<br> <<link "Police Station (Precinct 12)">> <<goto "Location_PoliceStation">> <</link>><br> <<if $active_job isnot null>> <br><strong>Active Contract:</strong><br> <<link `"Look for your target (" + $active_job.name + ")"`>> <<set $location_attempt to "Financial">> /* <- CHANGEZ CECI SELON LE QUARTIER */ <<goto "DarkWeb_Job_Resolution">> <</link>><br> <</if>> [[Go to the Park|Park]]<br> [[Look for drug deals|Drug_Market]]<br> [[Back to City Map|City_Hub]] <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/bank.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>First Neon Bank</h3> The interior is all marble, cold air, and security cameras. A teller in a crisp suit waits behind bulletproof glass. <<nobr>> <strong>Your Wallet:</strong> $ $money <<if $bank_loan > 0>> <strong>Your Debt:</strong> <span style="color:red;">$ $bank_loan</span> <strong>Deadline:</strong> $bank_days_left days remaining. <</if>> --- <<if $bank_result isnot "">> $bank_result <br>---<br> <</if>> <strong>Current Interest Rate:</strong> $bank_interest_rate% per day. <em>(Rates will change in $bank_rate_timer days).</em> <br><br> /* SCÉNARIO 1 : LE JOUEUR N'A AUCUNE DETTE -> IL PEUT EMPRUNTER */ <<if $bank_loan is 0>> <<set _maxLoan to $money * 3>> <<if _maxLoan > 0>> <strong>Your Borrowing Limit:</strong> $ _maxLoan<br><br> <strong>Borrow Money (Due in 7 days):</strong><br> Amount: <<numberbox "$borrow_input" 100 autofocus>> <<link "Sign Loan">> <<if $borrow_input > 0 and $borrow_input <= _maxLoan>> <<set $money += $borrow_input>> <<set $bank_loan to $borrow_input>> <<set $bank_days_left to 7>> /* Lancement du chrono */ <<set $bank_result to "The bank approved your loan. You received <strong>$" + $borrow_input + "</strong>. You have 7 days to repay it.">> <<else>> <<set $bank_result to "Invalid amount, or exceeds your borrowing limit.">> <</if>> <<goto "Financial_Bank">> <</link>><br><br> <<else>> //You need to have some money in your account before we can offer you a loan.//<br><br> <</if>> /* SCÉNARIO 2 : LE JOUEUR A UNE DETTE -> IL DOIT REMBOURSER */ <<else>> <strong>Repay Loan:</strong><br> Amount: <<numberbox "$repay_input" $bank_loan autofocus>> <<link "Make Payment">> <<if $repay_input > 0 and $repay_input <= $money>> <<set _actualRepay to Math.min($repay_input, $bank_loan)>> <<set $money -= _actualRepay>> <<set $bank_loan -= _actualRepay>> <<if $bank_loan is 0>> <<set $bank_days_left to 0>> <<set $bank_result to "You paid off your debt completely! Your line of credit is open again.">> <<else>> <<set $bank_result to "You repaid <strong>$" + _actualRepay + "</strong> to the bank.">> <</if>> <<else>> <<set $bank_result to "You don't have enough money in your wallet, or the amount is invalid.">> <</if>> <<goto "Financial_Bank">> <</link>><br><br> <</if>> <</nobr>> --- <<link "Leave the Bank">> <<set $bank_result to "">> <<goto "Financial">> <</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/car/14.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Neon Motors Luxury (Financial District)</h3> The showroom floor shines like a mirror. The vehicles here are less about transportation and more about raw power and status. <strong>Your Wallet:</strong> $ $money <strong>Garage Space:</strong> <<if $garage_level > 0>>Available<<else>><span style="color:red;">None</span><</if>> --- <<if $dealership_result isnot "">> $dealership_result <br>---<br> <</if>> <<if $garage_level < 2 >> A snooty salesperson looks at you with disdain. "Sir, we require all our clients to possess secure, private garaging before we even discuss a sale. Good day." <<else>> <strong>Luxury Vehicles for Sale:</strong><br><br> <<if $owned_vehicles.includes("Sports Car")>> //You already own the Sports Car.//<br><br> <<else>> <strong>Viper Sports Car</strong> - Unmatched speed. Will cut your travel times drastically.<br> <<if $money >= 35000>> <<link "Buy the Viper Sports Car ($35,000)">> <<set $money -= 35000>> <<run $owned_vehicles.push("Sports Car")>> <<set $active_vehicle to "Sports Car">> <<set $dealership_result to "The salesperson hands you the keys with a bow. The car has been transported to your garage.">> <<goto "Financial_Dealership">> <</link>> <<else>> //Price: $35,000 (Insufficient funds)// <</if>> <br><br> <</if>> <<if $owned_vehicles.includes("Armored SUV")>> //You already own the Armored SUV.//<br><br> <<else>> <strong>Armored SUV</strong> - Heavy, intimidating, and bulletproof.<br> <<if $money >= 60000>> <<link "Buy the Armored SUV ($60,000)">> <<set $money -= 60000>> <<run $owned_vehicles.push("Armored SUV")>> <<set $active_vehicle to "Armored SUV">> <<set $dealership_result to "You purchased the SUV. A driver has delivered it to your warehouse.">> <<goto "Financial_Dealership">> <</link>> <<else>> //Price: $60,000 (Insufficient funds)// <</if>> <br><br> <</if>> <</if>> --- <<link "Leave the Showroom">> <<set $dealership_result to "">> <<goto "Financial">> <</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/77.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>The Grand Mall</h3> The air conditioning hits you as you step into the sprawling, pristine corridors of the Financial District's premium mall. Soft elevator music plays in the background. <strong>Your Wallet:</strong> $ $money <<nobr>> --- <strong>Directory:</strong><br><br> [[Tech Haven (Electronics & Gadgets)|Mall_Electronics]]<br> [[Vespera Menswear & Tactical Tailoring (Outfits & Stat Gear)|Mall_Clothing]]<br> [[Neon Fitness (Premium Gym)|Mall_Gym]]<br> <<if $email_armory_high_read is true>> <<link "Enter Vanguard Security (High-Tier Armory)">><<goto "Location_Armory_High">><</link>><br> <</if>><br><br> --- <<link "Leave the Mall">> <<goto "Financial">> <</link>> <</nobr>>
You are in your apartment. It is safe here. <<nobr>> <<if $stat_points > 0>> <div style="background-color: #1a1a1a; border: 2px solid #ffaa00; padding: 15px; margin-bottom: 20px;"> <h3 style="color: #ffaa00; margin-top: 0;">Level Up!</h3> You have <strong>$stat_points</strong> Stat Point(s) available.<br><br> <<link "Increase Strength (+1)">> <<set $strength += 1>><<set $stat_points -= 1>><<goto "Home">> <</link>><br> <<link "Increase Intelligence (+1)">> <<set $intelligence += 1>><<set $stat_points -= 1>><<goto "Home">> <</link>><br> <<link "Increase Charisma (+1)">> <<set $charisma += 1>><<set $stat_points -= 1>><<goto "Home">> <</link>><br> <<link "Increase Max Health (+10)">> <<set $maxhp += 10>><<set $hp += 10>><<set $stat_points -= 1>><<goto "Home">> <</link>><br> <<link "Increase Max Stamina (+10)">> <<set $maxstamina += 10>><<set $stamina += 10>><<set $stat_points -= 1>><<goto "Home">> <</link>> </div> <</if>> <<if $has_computer is true>> [[Sit at the Computer|Computer_Main]]<br> <</if>> <<if $has_camera is true>> <em>Your professional 4K camera is resting safely on the desk, fully charged.</em><br> <</if>> <<link "Change your Loadout">><<goto "Player_Loadout">><</link>><br> <<link "Go to bed">> <<set _next5AM to (Math.floor($time / 1440) * 1440) + 1740>> <<set _sleepDuration to Math.max(480, _next5AM - $time)>> <<set $time += _sleepDuration>> /* --- CALCUL DE LA GUÉRISON --- */ /* 1. On détermine la Stamina maximum actuelle du joueur */ /* 2. On calcule le ratio de Stamina restante (ex: 50/100 = 0.5) */ <<set _staminaRatio to $stamina / $maxstamina>> /* 3. Formule : Ratio x 0.75 x HP Maximum */ <<set _hpRegen to Math.floor(_staminaRatio * 0.75 * $maxhp)>> /* 4. Application du soin si la régénération est supérieure à 0 */ <<if _hpRegen > 0>> <<set $hp += _hpRegen>> /* Sécurité pour ne pas dépasser le maximum */ <<if $hp > $maxhp>><<set $hp to $maxhp>><</if>> /* Ajout d'une notification prioritaire pour afficher le soin au réveil */ <<run $morning_notifications.unshift("<em>Your body rested. You recovered " + _hpRegen + " HP.</em>")>> <</if>> /* ----------------------------- */ /* Restauration de la stamina pour le lendemain */ <<set $stamina to $maxstamina>> <<endOfDayChecks>> <<set $wake_location to "Home">> <<goto "Wake_Up">> <</link>><br> <<if $garage_level > 0>> [[Head out to your Underground Garage|Player_Garage]]<br> <</if>> <<if $basement_level > 0>> [[Go down into the Locked Basement|Player_Basement]]<br> <</if>> <<if $garage_level is 0 and $basement_level is 0>> //You don't own any additional properties yet.//<br> <</if>> <br> [[Press this if you have an old save|System_Update]] <</nobr>> <br>---<br> <<if $player_housing is 0>> <<link "Leave Apartment">><<set $current_location to "Projects">><<goto "Projects">><</link>> <<elseif $player_housing is 1>> <<link "Leave Secured House">><<set $current_location to "Outskirts">><<goto "Outskirts">><</link>> <<elseif $player_housing is 2>> <<link "Leave Luxury Penthouse">><<set $current_location to "Financial">><<goto "Financial">><</link>> <</if>>
<h3>Neon Hotel - Escort Service</h3> You pick up the room phone and dial a number from a flashy business card left on the nightstand. "Welcome to Neon Delights," a voice purrs. "What is your preference tonight?" <strong>Your Wallet:</strong> $ $money --- <<if $money >= 100>> <<set $current_location to "Player_Hotel_Room">> <<link "Order a Caucasian escort ($100)">><<goto "Escort_White">><<set $money -= 100>><</link>><br> <<link "Order an Asian escort ($100)">><<goto "Escort_Asian">><<set $money -= 100>><</link>><br> <<link "Order a Black escort ($100)">><<goto "Escort_Black">><<set $money -= 100>><</link>><br> <<else>> //You don't have enough money ($100) for this service.//<br> <</if>> <br> [[Hang up and go back|Player_Hotel_Room]]
<h3>Neon Hotel - The Hallways</h3> <<set _randomNum to random(404, 499)>> You wander the carpeted floors of the hotel, listening at doors. It takes you about 30 minutes to find a room that sounds occupied but vulnerable. <<set _oldTime to $time>> <<set $time += 30>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <</if>> You stand in front of Room _randomNum. How do you want to get in? --- <<link "Kick the door down (Strength)">> <<if $strength >= random(1, 10)>> /* Succès : On entre en force, on maîtrise la cible et on passe au loot */ <<goto "Hotel_Room_Loot">> <<else>> <<set $combat_log to "You bounce off the reinforced door. The occupant yells and calls security! You have to fight a guard!">> /* Combat contre la sécurité : si on gagne, on doit fuir dans notre chambre */ <<set $current_location to "Player_Hotel_Room">> <<set $enemy to { name: "Hotel Security", hp: 40, max_hp: 40, strength: 4 }>> <<goto "Combat_Main">> <</if>> <</link>><br> <<link "Pick the lock (Intelligence)">> <<if $intelligence >= random(1, 10)>> /* Succès : On entre discrètement, on surprend la cible et on passe au loot */ <<goto "Hotel_Room_Loot">> <<else>> <<set $combat_log to "You mess up the lock. The door opens abruptly, and the occupant punches you in the face before you can react!">> /* Combat contre l'occupant : si on le bat, on prend le contrôle de la chambre ! */ <<set $current_location to "Hotel_Room_Loot">> <<set $enemy to { name: "Angry Occupant", hp: 35, max_hp: 35, strength: 3 }>> <<goto "Combat_Main">> <</if>> <</link>><br> <<link "Pretend to be Room Service (Charisma)">> <<if $charisma >= random(1, 10)>> /* Succès : On entre grâce au baratin, on s'isole avec la cible et on passe au loot */ <<goto "Hotel_Room_Loot">> <<else>> <<set $combat_log to "They don't buy your act for a second. They pull a knife and demand you empty your pockets!">> /* Combat contre l'occupant : si on le bat, on prend le contrôle de la chambre ! */ <<set $current_location to "Hotel_Room_Loot">> <<set $enemy to { name: "Paranoid Guest", hp: 30, max_hp: 30, strength: 4 }>> <<goto "Combat_Main">> <</if>> <</link>><br><br> --- [[Change your mind and go back to your room|Player_Hotel_Room]]
<style> .hotel-loot-wrap { max-width: 680px; margin: 10px auto; background: linear-gradient(165deg, #12101b 0%, #0a0910 100%); border: 1px solid #332a4d; border-radius: 12px; padding: 22px; box-shadow: 0 8px 28px rgba(0, 0, 0, 0.8); font-family: 'Segoe UI', Tahoma, sans-serif; } .hotel-header-bar { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #2b2340; padding-bottom: 12px; margin-bottom: 16px; } .hotel-log-banner { background: rgba(255, 215, 0, 0.08); border-left: 4px solid #ffd700; border-radius: 6px; padding: 12px 16px; margin: 14px 0; color: #f0e6d2; font-size: 0.95em; } .hotel-spots-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin-top: 12px; margin-bottom: 18px; } .hotel-spot-card { background: #181524; border: 1px solid #352d4d; border-radius: 8px; padding: 14px; display: flex; flex-direction: column; justify-content: space-between; transition: border-color 0.15s ease, transform 0.15s ease; } .hotel-spot-card:hover { border-color: #9b72ff; transform: translateY(-2px); } .hotel-spot-safe { background: linear-gradient(135deg, #241d12 0%, #17130c 100%); border: 1px solid #d4af37; box-shadow: 0 0 15px rgba(212, 175, 55, 0.15); } .hotel-spot-card a { display: inline-block; margin-top: 10px; padding: 8px 12px; background: rgba(155, 114, 255, 0.15); border: 1px solid #9b72ff; border-radius: 6px; color: #e0d4ff !important; font-weight: 700; text-align: center; text-decoration: none !important; } .hotel-spot-card a:hover { background: #9b72ff; color: #fff !important; } .hotel-spot-safe a { background: rgba(212, 175, 55, 0.2); border-color: #ffd700; color: #ffe680 !important; } .hotel-spot-safe a:hover { background: #ffd700; color: #111 !important; } </style> <<nobr>> /* --- 1. GÉNÉRATION DE LA CHAMBRE (Se fait une seule fois par visite) --- */ <<if $room_generated isnot true>> <<set $room_generated to true>> <<addHeat 3>> <<set $loot_log to "">> <<set $room_spots to []>> /* Liste de toutes les cachettes possibles */ <<set _possible_spots to ["Nightstand", "Suitcase", "Closet", "Under the mattress", "Bathroom cabinet", "Coat pockets"]>> /* On tire au sort 3 cachettes aléatoires pour cette chambre */ <<for _i to 0; _i < 3; _i++>> <<set _randSpot to _possible_spots.random()>> /* On s'assure de ne pas avoir deux fois le même meuble */ <<if not $room_spots.includes(_randSpot)>> <<run $room_spots.push(_randSpot)>> <</if>> <</for>> /* 10% de chance d'apparition du Coffre-Fort */ <<if random(1, 100) <= 10>> <<run $room_spots.push("Hidden Safe")>> <</if>> <</if>> <<set _spotIcons to { "Nightstand": "🛏️", "Suitcase": "🧳", "Closet": "🚪", "Under the mattress": "🛌", "Bathroom cabinet": "💊", "Coat pockets": "🧥", "Hidden Safe": "🔐" }>> /* --- 2. AFFICHAGE VISUEL --- */ <div class="hotel-loot-wrap"> <div class="hotel-header-bar"> <div> <h3 style="margin: 0; color: #e5dbff; letter-spacing: 1px; text-transform: uppercase;">🕵️ Suite Ransack & Burglary</h3> <span style="font-size: 0.82em; color: #9c8fb8;">After having your fun with the room's occupant, you sweep the suite for cash and valuables.</span> </div> <div style="text-align: right; font-size: 0.82em; color: #d4af37; font-weight: 700;"> Spots Left: <<print $room_spots.length>> </div> </div> <<randomImage "images/Sex/work/intruder/" 5 0 "#352d4d">> <<if $loot_log isnot "">> <div class="hotel-log-banner"> $loot_log </div> <</if>> /* --- 3. SYSTÈME DE FOUILLE --- */ <div style="margin-top: 16px; font-weight: 700; color: #cbb8ff; text-transform: uppercase; font-size: 0.85em; letter-spacing: 1px;"> 🔦 Searchable Stash Spots: </div> <<if $room_spots.length is 0>> <div style="background: rgba(255,255,255,0.03); border: 1px dashed #443a5e; border-radius: 8px; padding: 18px; text-align: center; color: #887da3; margin: 14px 0;"> <em>The suite has been completely tossed. Nothing of value remains.</em> </div> <<else>> <div class="hotel-spots-grid"> <<for _i to 0; _i < $room_spots.length; _i++>> <<set _spot to $room_spots[_i]>> <<set _icon to _spotIcons[_spot] || "🔍">> <<capture _i, _spot>> <<if _spot is "Hidden Safe">> <div class="hotel-spot-card hotel-spot-safe"> <div> <div style="font-size: 1.05em; font-weight: 800; color: #ffd700;">_icon Wall-Mounted Hidden Safe</div> <div style="font-size: 0.8em; color: #cbb882; margin-top: 4px;">High-value electronic lock • 15 mins • Intelligence Check (DC 14)</div> </div> <<link "🔓 Crack Safe Combination">> <<set _oldTime to $time>><<set $time += 15>> <<set _roll to random(1, 10) + $intelligence>> <<if _roll >= 14>> <<addXP 20>> <<set _lootMoney to random(200, 500)>> <<set $money += _lootMoney>> <<set $counters.total_searches += 1>> <<set $loot_log to "<span style='color:#00ffaa;'><strong>Safe Cracked!</strong></span> You bypassed the keypad tumblers and pocketed luxury watches and <strong>$" + _lootMoney + "</strong> in crisp bills.">> <<else>> <<set $loot_log to "<span style='color:#ff6666;'><strong>Lockout Triggered.</strong></span> The safe's magnetic deadbolts jammed before you could decode the sequence.">> <</if>> <<run $room_spots.deleteAt(_i)>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Hotel_Room_Loot">><</if>> <</link>> </div> <<else>> <div class="hotel-spot-card"> <div> <div style="font-size: 1.02em; font-weight: 700; color: #eee;">_icon _spot</div> <div style="font-size: 0.78em; color: #9c8fb8; margin-top: 4px;">Quick sweep • +5 mins • Cash & small valuables</div> </div> <<link `"Search " + _spot`>> <<set _oldTime to $time>><<set $time += 5>> <<set $counters.total_searches += 1>> <<if random(1, 10) <= 3>> <<set $loot_log to "You rummaged through the <strong>" + _spot + "</strong>, but only found hotel stationery and lint.">> <<else>> <<set _lootMoney to random(20, 80)>> <<addXP 5>> <<set $money += _lootMoney>> <<set $loot_log to "You searched the <strong>" + _spot + "</strong> and pocketed loose cash and valuables worth <strong style='color:#00ffaa;'>$" + _lootMoney + "</strong>.">> <</if>> <<run $room_spots.deleteAt(_i)>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Hotel_Room_Loot">><</if>> <</link>> </div> <</if>> <</capture>> <</for>> </div> <</if>> <div style="border-top: 1px solid #2b2340; padding-top: 14px; text-align: right;"> <<link "🚪 Leave the room and slip into the hallway">> <<set $room_generated to false>> <<set $loot_log to "">> <<goto "Hotel_Hallway">> <</link>> </div> </div> <</nobr>>
### Your Inventory Here is what you are currently carrying in your pockets. <div id="inventory-content"> <<nobr>> <<if $inv_message isnot "">> $inv_message <br>---<br> <</if>> /* --- MUNITIONS & ARMES IMPROVISÉES --- */ <<if $inventory.ammo > 0 or ($active_firearm isnot "none" and $active_firearm isnot undefined)>> <strong>Ammunition (9mm / Rifle / Shells):</strong> <span style="color: #ffaa00;"><<print $inventory.ammo>> rounds</span> <<if $in_prison is false and $active_firearm isnot "none" and $active_firearm isnot undefined>> <span style="color: #aaa; font-size: 0.9em;">(<<print $weapon_db[$active_firearm].name>> Mag: <strong><<print $gun_mag>> / <<print $weapon_db[$active_firearm].mag_size>></strong>)</span> <<if $gun_mag < $weapon_db[$active_firearm].mag_size and $inventory.ammo > 0>> <<link "[ 🔄 Reload Firearm ]">> <<set $gun_max_mag to $weapon_db[$active_firearm].mag_size>> <<set _needed to $gun_max_mag - $gun_mag>> <<set _toLoad to Math.min(_needed, $inventory.ammo)>> <<set $gun_mag += _toLoad>> <<set $inventory.ammo -= _toLoad>> <<set $inv_message to "<em>You eject the partial magazine and load <strong>" + _toLoad + " round(s)</strong> into your " + $weapon_db[$active_firearm].name + " (" + $gun_mag + "/" + $gun_max_mag + ").</em>">> <<goto `passage()`>> <</link>> <</if>> <</if>> <br> <</if>> <<if $inventory.shank > 0>> <strong>Improvised Prison Shank:</strong> <span style="color: #ff4444;">x<<print $inventory.shank>></span><br> <</if>> <<if $inventory.cigarettes > 0>> <strong>Pack of Cigarettes:</strong> <span style="color: #00aaff;">x<<print $inventory.cigarettes>></span> <em>(Prison currency / Bribes)</em> <<if $in_prison is false>> <<link "[ Smoke one (-2 Heat, +5 Stamina) ]">> <<set $inventory.cigarettes -= 1>> <<set $heat to Math.max(0, $heat - 2)>> <<set $stamina to Math.min($maxstamina, $stamina + 5)>> <<set $inv_message to "<em>You light up a cigarette and watch the smoke drift into the neon haze. Your nerves settle (-2 Heat, +5 Stamina).</em>">> <<goto `passage()`>> <</link>> <</if>> <br> <</if>> /* --- BOISSONS --- */ <<if $inventory.energy_drink > 0>> <strong>Energy Drink</strong> (x<<print $inventory.energy_drink>>) <<link "[ Drink one (+20 Stamina) ]">> <<set $inventory.energy_drink -= 1>> <<set $stamina += 20>> <<if $stamina > $maxstamina>><<set $stamina to $maxstamina>><</if>> <<set $inv_message to "<em>You down the cold Energy Drink. Your heart rate spikes (+20 Stamina).</em>">> <<goto `passage()`>> <</link>> <br> <</if>> <<if $inventory.beer > 0>> <strong>Bodega Beer</strong> (x<<print $inventory.beer>>) <<link "[ Drink a Beer (Takes 5 mins) ]">> /* Consommation de l'objet et du temps */ <<set $inventory.beer -= 1>> <<set $drunk_units += 1>> <<set $counters.total_alcohol_drank += 1>> <<set _oldTime to $time>> <<set $time += 5>> <<set $inv_message to "<em>You crack open a warm Bodega beer and chug it.</em>">> /* Définition des limites selon le trait Iron Liver */ <<set _blackout_limit to ($traits.iron_liver ? 20 : 15)>> <<set _int_penalty_limit to ($traits.iron_liver ? 8 : 5)>> /* Vérification Blackout et bagarre */ <<if $drunk_units >= _blackout_limit>> <<set $hp to 0>> <<set $inv_message to "">> /* Nettoyage pour la prochaine fois */ <<goto "Combat_Lose">> <<else>> /* Vérification 10 unités : +1 Force */ <<if $drunk_units >= 10 and $drunk_str_bonus is false>> <<set $strength += 1>> <<set $drunk_str_bonus to true>> <<set $inv_message += "<br><br><strong>System:</strong> Liquid courage fills your veins. (Strength +1 until you sleep)">> <</if>> /* Vérification malus Intelligence (-1) */ <<if $drunk_units >= _int_penalty_limit and $drunk_int_penalty is false>> <<set $intelligence -= 1>> <<set $drunk_int_penalty to true>> <<set $inv_message += "<br><br><strong>System:</strong> The room spins slightly. It's hard to focus. (Intelligence -1 until you sleep)">> <</if>> /* Vérification du temps de sommeil */ <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<set $inv_message to "">> /* Nettoyage si on s'évanouit */ <<goto "Pass_Out">> <<else>> <<goto `passage()`>> <</if>> <</if>> <</link>><br> <</if>> /* --- DROGUES & CONSOMMABLES (BUFFS DE STATS) --- */ <<if $inventory.weed > 0 or $inventory.cocaine > 0 or $inventory.ecstasy > 0 or $inventory.crack > 0 or $inventory.heroin > 0>> <br><strong>Narcotics Stash (Consumable Buffs & Street Product):</strong><br> <</if>> <<if $inventory.weed > 0>> <strong>Weed:</strong> x<<print $inventory.weed>> <<link "[ Smoke a Joint (+25 HP, +15 Stamina, -1 Heat) ]">> <<set $inventory.weed -= 1>> <<set $hp to Math.min($maxhp, $hp + 25)>> <<set $stamina to Math.min($maxstamina, $stamina + 15)>> <<set $heat to Math.max(0, $heat - 1)>> <<set $inv_message to "<em>You smoke a heavy joint. The tension in your muscles fades away (+25 HP, +15 Stamina, -1 Heat).</em>">> <<goto `passage()`>> <</link>><br> <</if>> <<if $inventory.cocaine > 0>> <strong>Cocaine:</strong> x<<print $inventory.cocaine>> <<link "[ Snort a Line (+50 Stamina, +2 Intelligence today) ]">> <<set $inventory.cocaine -= 1>> <<set $stamina to Math.min($maxstamina + 30, $stamina + 50)>> <<if $drug_buffs.cocaine_int < 2>> <<set $intelligence += 2>> <<set $drug_buffs.cocaine_int += 2>> <<set $inv_message to "<em>You snort a line of pure powder. Your mind races at hyper-speed! (+50 Stamina, +2 Intelligence until sleep).</em>">> <<else>> <<set $inv_message to "<em>You snort another line. Your heart hammers in your chest (+50 Stamina; Intelligence buff already active).</em>">> <</if>> <<goto `passage()`>> <</link>><br> <</if>> <<if $inventory.ecstasy > 0>> <strong>Ecstasy:</strong> x<<print $inventory.ecstasy>> <<link "[ Pop a Pill (+25 Stamina, +3 Charisma today) ]">> <<set $inventory.ecstasy -= 1>> <<set $stamina to Math.min($maxstamina, $stamina + 25)>> <<if $drug_buffs.ecstasy_cha < 3>> <<set $charisma += 3>> <<set $drug_buffs.ecstasy_cha += 3>> <<set $inv_message to "<em>Euphoria washes over you. Your confidence and magnetism skyrocket (+25 Stamina, +3 Charisma until sleep).</em>">> <<else>> <<set $inv_message to "<em>You pop another pill, riding the wave of euphoria (+25 Stamina; Charisma buff already active).</em>">> <</if>> <<goto `passage()`>> <</link>><br> <</if>> <<if $inventory.crack > 0>> <strong>Crack:</strong> x<<print $inventory.crack>> <<link "[ Hit the Pipe (+3 Strength, +20 HP, -1 Charisma today) ]">> <<set $inventory.crack -= 1>> <<set $hp to Math.min($maxhp + 20, $hp + 20)>> <<if $drug_buffs.crack_str < 3>> <<set $strength += 3>> <<set $charisma -= 1>> <<set $drug_buffs.crack_str += 3>> <<set $drug_buffs.crack_cha += 1>> <<set $inv_message to "<em>Raw, violent adrenaline surges through your veins! You feel unstoppable (+3 Strength, +20 HP, -1 Charisma until sleep).</em>">> <<else>> <<set $inv_message to "<em>Your jaw clenches tight as another hit numbs the pain (+20 HP; Strength buff already active).</em>">> <</if>> <<goto `passage()`>> <</link>><br> <</if>> <<if $inventory.heroin > 0>> <strong>Heroin:</strong> x<<print $inventory.heroin>> <<link "[ Inject Dose (+60 HP, -20 Stamina) ]">> <<set $inventory.heroin -= 1>> <<set $hp to Math.min($maxhp, $hp + 60)>> <<set $stamina to Math.max(0, $stamina - 20)>> <<set $inv_message to "<em>A heavy, numbing warmth blankets your whole body, completely erasing your physical pain (+60 HP, -20 Stamina).</em>">> <<goto `passage()`>> <</link>><br> <</if>> <<if $inventory.energy_drink is 0 and $inventory.beer is 0 and $inventory.cigarettes is 0 and $inventory.weed is 0 and $inventory.cocaine is 0 and $inventory.ecstasy is 0 and $inventory.crack is 0 and $inventory.heroin is 0 and $inventory.ammo is 0 and $inventory.shank is 0>> <em>Your pockets are completely empty.</em><br> <</if>> <</nobr>> </div> --- <<link "Go back">> <<set $inv_message to "">> <<if $menu_return_passage isnot undefined and $menu_return_passage isnot "" and !["War_Raid_Hub", "War_Assault_Start", "War_Assault_Win", "Gunfight_Main", "Gunfight_Turn", "Combat_Main", "Combat_Turn", "Combat_Win", "Combat_Lose"].includes($menu_return_passage)>> <<goto $menu_return_passage>> <<elseif $in_prison is true>> <<goto "Prison_Hub">> <<else>> <<set $menu_return_passage to $current_location>> <<goto $current_location>> <</if>> <</link>>
<h3>Street Operations</h3> <<nobr>> /* --- 1. CALCULS DE CAPACITÉ ET AVANCEMENT DU TEMPS --- */ <<set _maxCapacity to ($basement_level is 1 ? 3 : 20)>> <<set _freeSpace to _maxCapacity - $basement_captives.length>> <<set _spaceTaken to $basement_captives.length>> <<set _oldTime to $time>> <<set $time += 60>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <</if>> /* --- 2. DÉTERMINATION DE LA CIBLE --- */ <<set _roll to random(1, 10)>> <<if _roll <= 6>> <<set $target_count to 1>> <<elseif _roll <= 9>> <<set $target_count to 2>> <<else>> <<set $target_count to 3>> <</if>> /* --- 3. AFFICHAGE DES IMAGES D'OBSERVATION --- */ <<if $target_count is 1>> <<randomImage "images/Sex/work/nabbing/one" 8>> <<elseif $target_count is 2>> <<randomImage "images/Sex/work/nabbing/two" 5>> <<else>> <<randomImage "images/Sex/work/nabbing/three" 5>> <</if>> <br><br> You park your Utility Van in a dark alley and watch the sidewalks. <br><br>---<br><br> <<if $target_count is 1>> You spot a lone woman walking home by herself. She is isolated and completely unaware of her surroundings. <<elseif $target_count is 2>> You spot a pair of women walking together, talking loudly. Taking down two targets at once will require speed and precision. <<else>> You spot a group of three women leaving a venue together. A high-risk, high-reward situation. Convincing or overpowering them will be extremely difficult. <</if>> <br><br>---<br><br> <strong>Cellar Capacity:</strong> _spaceTaken / _maxCapacity spaces filled.<br> <strong>Current Stamina:</strong> $stamina <br><br> /* --- 4. VÉRIFICATIONS : FATIGUE ET ESPACE --- */ <<if $stamina < 20>> /* Le joueur est trop fatigué */ <span style="color: #ff4444;"><em>You are exhausted. Your muscles ache and your reflexes are dull. You don't have the energy required to pull off a kidnapping right now.</em></span><br><br> <<link "Abort and get some rest">> <<goto $current_location>> <</link>> <<elseif _freeSpace < $target_count>> /* Le joueur n'a pas assez de place */ <span style="color: #ffaa00;"><em>You do not have enough free space in your cellar (_freeSpace space(s) left) to secure this target group.</em></span><br><br> <<link "Abandon operation and keep driving">> <<goto $current_location>> <</link>> <<else>> /* Le joueur est en forme ET a de la place -> On affiche les choix */ /* Calcul de base de la difficulté */ <<set $kidnap_difficulty to ($target_count is 1 ? 10 : ($target_count is 2 ? 14 : 18))>> /* Application des bonus de Trait */ <<if $traits.kidnapper_3 is true>> <<set $kidnap_difficulty to 0>> /* Succès automatique */ <<elseif $traits.kidnapper_2 is true>> <<set $kidnap_difficulty -= 4>> /* Grosse réduction */ <<elseif $traits.kidnapper_1 is true>> <<set $kidnap_difficulty -= 2>> /* Petite réduction */ <</if>> <strong>Choose your method:</strong><br><br> <<link "Use brute force (Strength)">> <<set $kidnap_method to "strength">> <<goto "Kidnap_Resolve">> <</link>><br> <<link "Stalk and ambush from the shadows (Intelligence)">> <<set $kidnap_method to "intelligence">> <<goto "Kidnap_Resolve">> <</link>><br> <<link "Lure them into the van with a pretext (Charisma)">> <<set $kidnap_method to "charisma">> <<goto "Kidnap_Resolve">> <</link>><br><br> <<link "Abort and return to the main street">> <<goto $current_location>> <</link>> <</if>> <</nobr>>
<h3>Operation Resolution</h3> <<nobr>> /* Twine lit correctement la statistique choisie (strength, intelligence ou charisma) */ <<set _statValue to State.variables[$kidnap_method]>> <<set _playerRoll to random(1, 10) + _statValue>> <<set $stamina -= 20>> /* --- VÉRIFICATION DU CHAUFFEUR DANS LE GANG --- */ <<set _hasDriver to false>> <<if $gang_members isnot undefined>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].specialty is "Driver">> <<set _hasDriver to true>> <<break>> <</if>> <</for>> <</if>> <<if _playerRoll >= $kidnap_difficulty>> /* RÉUSSITE */ <<set $counters.total_kidnappings += $target_count>> <<set _xpgained to 15*$target_count>> <<addXP _xpgained>> <<set _heatAdded to 4 * $target_count>> <<addHeat _heatAdded>> /* On génère les filles avec un prénom aléatoire et des stats vierges */ <<for _i to 0; _i < $target_count; _i++>> <<set _randName to $female_names.random()>> <<set _races to ["white", "asian", "black"]>> <<set _race to _races.random()>> <<set _baseIncome to random(30, 100)>> <<run $basement_captives.push({ id: random(100000, 999999), name: _randName, race: _race, discipline: 0, tied: true, clothes_level: 0, surgery_done: false, location: "basement", has_streaming_gear: false, status: "captive", days_in_trouble: 0, base_income: _baseIncome })>> <</for>> /* Affichage du GIF de l'action de kidnapping */ <div style="border: 2px solid #555; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;"> <img src="images/Sex/work/nabbing/kidnaping.gif" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <<if $kidnap_method is "strength">> You strike fast, overpowering the targets before they can scream, forcing them into the back of the van and locking the doors. <<elseif $kidnap_method is "intelligence">> Your plan works flawlessly. You isolate them in a blind spot of the street cameras and secure them without attracting attention. <<else>> Your disguise and cover story are convincing. They willingly step inside the vehicle. By the time they realize the trap, the child locks are engaged. <</if>> <br><br> <strong>Success:</strong> You successfully transported $target_count target(s) to your Underground Cellar. /* AFFICHAGE DES IMAGES DANS LA CAVE */ <<if $target_count is 1>> <<randomImage "images/Sex/work/nabbing/onesex" 8 1 "#ed2939">> <<elseif $target_count is 2>> <<randomImage "images/Sex/work/nabbing/twosex" 6 1 "#ed2939">> <<else>> <<randomImage "images/Sex/work/nabbing/threesex" 4 1 "#ed2939">> <</if>> <br><br> /* --- NOUVELLE MÉCANIQUE : "HAVE FUN" --- */ <<if $target_count is 1 and _hasDriver is true>> <div id="van_fun_container" style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #aa00ff; margin-bottom: 20px;"> <<link "Have some fun in the back before arriving (Your Driver handles the wheel)">> <<replace "#van_fun_container">> /* Jet de charisme pour le consentement */ <<set _charmRoll to random(1, 10) + $charisma>> <<set _isWilling to (_charmRoll >= 12)>> /* Difficulté arbitraire à 12, à ajuster selon votre équilibrage */ <<set _folder to (_isWilling ? "willing" : "unwill")>> <<if _isWilling>> <<set _discGain to random(20, 50)>> <<else>> <<set _discGain to random(10, 30)>> <</if>> <<set $basement_captives[$basement_captives.length - 1].discipline += _discGain>> <<if _isWilling>> <span style="color: #ffaa00;"><em>Your raw charisma and dominant aura confuse her fear into submission. She complies willingly, desperate to stay on your good side as the van drives through the city. (+<<print _discGain>> Discipline)</em></span> <<randomImage "images/Sex/work/van/bj/willing/" 5 0 "#ed2939">> <<randomImage "images/Sex/work/van/sex/willing/" 12 0 "#ed2939">> <<randomImage "images/Sex/work/van/cum/willing/" 2 0 "#ed2939">><br><br> <<else>> <span style="color: #ff4444;"><em>She resists and cries, but the back of the van is completely soundproof. You force her into submission, breaking her spirit before you even reach the basement. (+<<print _discGain>> Discipline)</em></span> <<randomImage "images/Sex/work/van/bj/unwill/" 5 0 "#ed2939">> <<randomImage "images/Sex/work/van/sex/unwill/" 12 0 "#ed2939">> <<randomImage "images/Sex/work/van/cum/unwill/" 2 0 "#ed2939">><br><br> <</if>> <</replace>> <</link>> </div> <</if>> <<link "Drive back to safety">> <<goto $current_location>> <</link>> <<else>> /* ÉCHEC */ <<addHeat 5>> <<if $kidnap_method is "strength">> The attempt turns messy. They fight back viciously and scream for help. You have to handle the situation before the police arrive. <<set $combat_log to "The target group resists violently!">> <<set $enemy to { name: "Resisting Targets", hp: (20 * $target_count), max_hp: (20 * $target_count), strength: (2 + $target_count) }>> <<goto "Combat_Main">> <<else>> Your approach fails. They notice you stalking them or realize your story is fake. They immediately run toward a well-lit area with bystanders, forcing you to abort and flee in the van to avoid suspicion. <br><br> <strong>Failure:</strong> The targets escaped. Your face might have been seen. <<set _policeRoll to random(1, 100)>> <<if _policeRoll <= 15>> A passing police cruiser hears the scream and immediately turns its sirens on. They spotted your Utility Van! You jump into the driver's seat and slam the gas! <br><br> <span style="color: #ffaa00;"><em>(You are driving your heavy Utility Van. Your personal vehicle is safely parked elsewhere.)</em></span> <br><br> <<link "Try to outrun them in the Van!">> /* STATS FORCÉES DE LA CAMIONNETTE */ <<set $player_car_speed to 3>> <<set $player_car_handling to 0.35>> <<goto "CarChase_Minigame">> <</link>> <<else>> <br><br> <<link "Flee the scene">> <<goto $current_location>> <</link>> <</if>> <</if>> <</if>> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/vanguard.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Vanguard Security (Tier 2 Armory)</h3> The underground facility is spotless. Assault rifles, submachine guns, heavy body armor, and tactical ammunition sit in custom foam cases. This is cartel-level hardware. <<nobr>> <strong>Your Wallet:</strong> $<<print $money>> | <strong>Ammo Reserves:</strong> <span style="color: #ffaa00;"><<print $inventory.ammo>> rounds</span><br> <hr style="border-color: #444;"> <div style="background-color: #1a1a1a; padding: 10px; margin-bottom: 15px; border-left: 3px solid #ffaa00;"> <strong>Tactical Ammo Crate (45 Rounds)</strong> - <strong>$250</strong><br> <span style="color: #aaa; font-size: 0.9em;">Military-grade hollow-point and rifle rounds for sustained firefights.</span><br> <<if $money >= 250>> <<link "[ Buy 45 Rounds ($250) ]">> <<set $money -= 250>> <<set $inventory.ammo += 45>> <<goto "Location_Armory_High">> <</link>> <<else>> <span style="color: #888;">[ Insufficient funds ]</span> <</if>> </div> /* Liste des armes vendues ici (incluant la MP5 SMG) */ <<set _high_stock to ["machete", "katana", "pistol_9mm", "shotgun", "smg", "assault_rifle"]>> <<for _i to 0; _i < _high_stock.length; _i++>> <<set _wepId to _high_stock[_i]>> <<set _wep to $weapon_db[_wepId]>> <<capture _wepId, _wep>> <div style="background-color: #111; padding: 10px; margin-bottom: 5px; border-left: 3px solid #ff4444;"> <strong><<print _wep.name>></strong> <span style="color: #aaa; font-size: 0.9em;">(<<print _wep.type.toUpperFirst()>> | Damage: <<print _wep.damage>><<if _wep.mag_size>> | Mag: <<print _wep.mag_size>><</if>>)</span> - <strong>$<<print _wep.price>></strong> <br> <<if $inventory.weapons.includes(_wepId)>> <span style="color: #00ffaa;">[ Already Owned ]</span> <<elseif $money >= _wep.price>> <<link "[ Purchase ]">> <<set $money -= _wep.price>> <<run $inventory.weapons.push(_wepId)>> <<goto "Location_Armory_High">> <</link>> <<else>> <span style="color: #888;">[ Insufficient funds ]</span> <</if>> </div> <</capture>> <</for>> <br> <</nobr>> <<link "Leave the facility">><<goto "Financial">><</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/ironcladsurplus.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Ironclad Surplus (Tier 1 Armory)</h3> You step into the backroom of the pawn shop. The walls are lined with basic firearms and melee weapons. Reliable, but nothing that will stop a SWAT team. <<nobr>> <strong>Your Wallet:</strong> $<<print $money>> | <strong>Ammo Reserves:</strong> <span style="color: #ffaa00;"><<print $inventory.ammo>> rounds</span> <hr style="border-color: #444;"> <div style="background-color: #1a1a1a; padding: 10px; margin-bottom: 15px; border-left: 3px solid #ffaa00;"> <strong>Surplus Ammunition Box (15 Rounds)</strong> - <strong>$100</strong><br> <span style="color: #aaa; font-size: 0.9em;">Standard rounds compatible with your street firearms.</span><br> <<if $money >= 100>> <<link "[ Buy 15 Rounds ($100) ]">> <<set $money -= 100>> <<set $inventory.ammo += 15>> <<goto "Location_Armory_Low">> <</link>> <<else>> <span style="color: #888;">[ Insufficient funds ]</span> <</if>> </div> /* Liste des armes vendues ici */ <<set _low_stock to ["brass_knuckles", "baseball_bat", "switchblade", "zip_gun", "revolver"]>> <<for _i to 0; _i < _low_stock.length; _i++>> <<set _wepId to _low_stock[_i]>> <<set _wep to $weapon_db[_wepId]>> <<capture _wepId, _wep>> <div style="background-color: #111; padding: 10px; margin-bottom: 5px; border-left: 3px solid #555;"> <strong><<print _wep.name>></strong> <span style="color: #aaa; font-size: 0.9em;">(<<print _wep.type.toUpperFirst()>> | Damage: <<print _wep.damage>><<if _wep.mag_size>> | Mag: <<print _wep.mag_size>><</if>>)</span> - <strong>$<<print _wep.price>></strong> <br> <<if $inventory.weapons.includes(_wepId)>> <span style="color: #00ffaa;">[ Already Owned ]</span> <<elseif $money >= _wep.price>> <<link "[ Purchase ]">> <<set $money -= _wep.price>> <<run $inventory.weapons.push(_wepId)>> <<goto "Location_Armory_Low">> <</link>> <<else>> <span style="color: #888;">[ Insufficient funds ]</span> <</if>> </div> <</capture>> <</for>> <</nobr>> <br> <<link "Leave the shop">><<goto "Slums">><</link>>
<h3>The Platinum Room - Auction House</h3> You step through a reinforced security door into a soundproofed, circular theater. Wealthy patrons in tailored suits sip expensive scotch in plush velvet booths. In the center of the room, "assets" are displayed under harsh spotlights on a rotating stage. The air is heavy with cigar smoke and unregulated capitalism. <<nobr>> <div style="background-color: #222; padding: 10px; text-align: center; margin-bottom: 20px;"> <<link "[ Take a Seat (Buy) ]">> <<set $auction_tab to "buy">> <<goto "Location_Auction">> <</link>> | <<link "[ Speak to the Broker (Sell) ]">> <<set $auction_tab to "sell">> <<goto "Location_Auction">> <</link>> </div> <strong>Your Wallet:</strong> $<<print $money>> <hr style="border-color: #444;"> <<if $auction_tab is "buy">> /* --- ACTUALISATION HEBDOMADAIRE DU CATALOGUE --- */ <<set _currentDay to Math.floor($time / 1440)>> <<if _currentDay >= $auction_last_refresh + 7 or $auction_pool.length is 0>> <<set $auction_last_refresh to _currentDay>> <<set $auction_pool to []>> <<for _i to 0; _i < 10; _i++>> <<set _baseIncome to random(40, 150)>> <<run $auction_pool.push({ id: random(100000, 999999), name: $female_names.random(), race: ["white", "asian", "black"].random(), discipline: random(50, 100), tied: false, clothes_level: 0, surgery_done: false, location: "hideout", has_streaming_gear: false, status: "active", days_in_trouble: 0, base_income: _baseIncome })>> <</for>> <</if>> <h4>Tonight's Catalog (Refreshes in <<print 7 - (_currentDay - $auction_last_refresh)>> days)</h4> You review the electronic tablet on your table detailing the current lineup on stage. <br><br> <<if $auction_pool.length is 0>> <em>The stage is empty. The auctioneer is taking a break.</em> <<else>> <<for _i to 0; _i < $auction_pool.length; _i++>> <<set _girl to $auction_pool[_i]>> <<set _buyPrice to _girl.base_income * 20>> <<capture _i, _girl, _buyPrice>> <div style="background-color: #111; padding: 10px; margin-bottom: 5px; border-left: 3px solid #ffd700;"> <strong>Lot #<<print _girl.id>>: <<print _girl.name>></strong> (<<print _girl.race.toUpperFirst()>>)<br> <strong>Behavioral Profile (Discipline):</strong> <<print _girl.discipline>>/100<br> Est. Yield: $<<print _girl.base_income>>/day | <strong>Buyout Price: $<<print _buyPrice>></strong><br> <<if $money >= _buyPrice>> <<link "[ Raise Paddle (Purchase) ]">> <<set $money -= _buyPrice>> <<run $network_girls.push(_girl)>> <<run $auction_pool.deleteAt(_i)>> <<goto "Location_Auction">> <</link>> <<else>> <span style="color: #ff4444;">[ Insufficient Funds ]</span> <</if>> </div> <</capture>> <</for>> <</if>> <<elseif $auction_tab is "sell">> <h4>Backstage Broker</h4> You pull the floor manager aside to discuss liquidating some of your own stock. <br><br> <<set _multipliers to [1, 0.75, 0.5]>> <<if $auction_sales_today < 3>> <<set _currentMulti to _multipliers[$auction_sales_today]>> <strong>Stage Slots Remaining Today:</strong> <<print 3 - $auction_sales_today>><br> <strong>Current Crowd Interest:</strong> <<print _currentMulti * 100>>% of estimated value. <br><br> <<if $network_girls.length > 0>> <h5 style="color: #ffaa00;">Active Roster</h5> <<for _i to 0; _i < $network_girls.length; _i++>> <<set _girl to $network_girls[_i]>> <<if _girl.location is "hideout">> <<set _sellPrice to Math.floor(_girl.base_income * 15 * _currentMulti)>> <<capture _i, _sellPrice>> <div style="background-color: #1a1a1a; padding: 10px; margin-bottom: 5px; border-left: 3px solid #ff4444;"> <strong><<print _girl.name>></strong> (Current Location: <<print _girl.location.toUpperFirst()>>)<br> Est. Yield: $<<print _girl.base_income>> | <strong>Broker Offer: $<<print _sellPrice>></strong><br> <<link "[ Hand Over Asset ]">> <<set $money += _sellPrice>> <<set $auction_sales_today += 1>> <<run $network_girls.deleteAt(_i)>> <<goto "Location_Auction">> <</link>> </div> <</capture>> <</if>> <</for>> <</if>> <<if $basement_captives.length > 0>> <br> <h5 style="color: #aa55ff;">Basement Captives (Untrained)</h5> <<for _j to 0; _j < $basement_captives.length; _j++>> <<set _captive to $basement_captives[_j]>> <<set _sellPrice to Math.floor(_captive.base_income * 15 * _currentMulti)>> <<capture _j, _sellPrice>> <div style="background-color: #1a1a1a; padding: 10px; margin-bottom: 5px; border-left: 3px solid #ff4444;"> <strong><<print _captive.name>></strong> (Status: Training)<br> Est. Yield: $<<print _captive.base_income>> | <strong>Broker Offer: $<<print _sellPrice>></strong><br> <<link "[ Hand Over Asset ]">> <<set $money += _sellPrice>> <<set $auction_sales_today += 1>> <<addHeat 4>> <<run $basement_captives.deleteAt(_j)>> <<goto "Location_Auction">> <</link>> </div> <</capture>> <</for>> <</if>> <<if $network_girls.length is 0 and $basement_captives.length is 0>> <em>You have no assets to put on the stage.</em> <</if>> <<else>> <span style="color: #ff4444;"><strong>"The crowd is bored. Bring fresh faces tomorrow." The broker dismisses you.</strong></span> <</if>> <</if>> <br>---<br> <<link "Return to VIP Lounge">><<goto "Club_VIP_Floor">><</link>> <</nobr>>
<h3>The Streaming Hangar</h3> You enter the secluded warehouse. The main floor is divided into soundproofed cubicles glowing with neon lights. Your employees are busy interacting with their viewers. <br><br> <<nobr>> <<set _hangar_girls to []>> <<for _i to 0; _i < $network_girls.length; _i++>> <<if $network_girls[_i].location is "hangar">> <<run _hangar_girls.push({ index: _i, girl: $network_girls[_i] })>> <</if>> <</for>> <<if _hangar_girls.length is 0>> <em>There is no one working here right now. Assign employees to the Hangar using your Phone.</em> <<else>> <strong>Active Streamers:</strong><br><br> <<for _j to 0; _j < _hangar_girls.length; _j++>> <<set _target to _hangar_girls[_j]>> <<capture _target>> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00aaff; margin-bottom: 10px;"> <strong><<print _target.girl.name>></strong> is currently live. The chat is demanding a special show. <br><br> /* --- VÉRIFICATION DE LA LIMITE QUOTIDIENNE --- */ <<if _target.girl.stream_minigame_played is true>> <span style="color: #888;"><em>She already performed a special show today. She is sticking to standard interactions to rest a bit.</em></span> <<elseif $stamina<15>> <span style="color: #888;"><em>You're too tired to do this</em></span> <<else>> <<link "Help her moderate and perform (Start Minigame)">> <<set $mg_target_index to _target.index>> <<goto "Action_HangarMinigame">> <</link>> <</if>> </div> <</capture>> <</for>> <</if>> <br>---<br> <</nobr>> <<link "Leave the Hangar and go back outside">> <<goto "Outskirts">> <</link>>
<div @style="'border: 2px solid ' + (_borderColor || '#ff4444') + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/slums.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>🏚️ Slums Trap House</h3> <<nobr>> The stench of baking soda, burnt spoons, and harsh chemical fumes permeates this barricaded derelict duplex. Heavy reinforced sheet metal shields the front door from street kicks, and heavy iron bars cover the windows. In the kitchen, a blue propane flame flickers beneath cast iron skillets and Pyrex measuring jugs, while a loose floorboard in the corner conceals your runner stash safe. <br><br> <<if $traphouse_msg isnot undefined and $traphouse_msg isnot "">> <div style="background-color: #222; border-left: 3px solid #00ffaa; padding: 10px; margin-bottom: 15px;"> $traphouse_msg </div> <<set $traphouse_msg to "">> <</if>> <<if $traphouse_stash is undefined>> <<set $traphouse_stash to { money: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> <</if>> <!-- ENFORCER ON DUTY --> <<set _traphouse_guard to null>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "traphouse">> <<set _traphouse_guard to $gang_members[_g]>> <<break>> <</if>> <</for>> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #ffaa00; margin-bottom: 15px; border-radius: 4px;"> <strong>🛡️ Stationed Guard / Enforcer:</strong> <<if _traphouse_guard isnot null>> <span style="color: #00ffaa;"><strong><<print _traphouse_guard.name>></strong> (<<print _traphouse_guard.specialty>>)</span> — Providing armed perimeter security and running local distribution. <<else>> <span style="color: #888;">None stationed. (Assign a gang soldier via your Phone's Empire App to protect the house and run local crack sales).</span> <</if>> </div> <!-- STOVE STATION: COOK CRACK --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #ff4444; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #ff7777;">🍳 Kitchen Crack-Cooking Station</h4> Convert raw Cocaine into rock-hard street Crack. Each batch combines <strong>1 Cocaine + 1 Box of Baking Soda</strong> to yield <strong>3 Crack Rocks</strong>.<br> <strong>Your Ingredients:</strong> Cocaine: <span style="color: #00ffaa;">$inventory.cocaine</span> | Baking Soda: <span style="color: #00ffaa;">$inventory.baking_soda</span> <br><br> <<set _maxCook to Math.min($inventory.cocaine, $inventory.baking_soda)>> <<if _maxCook >= 1>> <<link "[ 🍳 Cook 1 Batch (1 Coke + 1 Baking Soda → 3 Crack | 15 mins) ]">> <<set $time += 15>> <<set $inventory.cocaine -= 1>> <<set $inventory.baking_soda -= 1>> <<set $inventory.crack += 3>> <<set $traphouse_msg to "You dissolve the cocaine in hot water, whisk in the Arm & Hammer baking soda, and simmer the mixture until an amber oil slick separates. Dipped in an ice bath, it crystalizes into <strong>3 potent Crack rocks</strong>!">> <<goto "Property_TrapHouse">> <</link>><br> <</if>> <<if _maxCook >= 5>> <<link "[ 🍳 Cook 5 Batches (5 Coke + 5 Baking Soda → 15 Crack | 45 mins) ]">> <<set $time += 45>> <<set $inventory.cocaine -= 5>> <<set $inventory.baking_soda -= 5>> <<set $inventory.crack += 15>> <<set $traphouse_msg to "You scale up the operation across several Pyrex pots. The steam fills the kitchen as you whip up <strong>15 Crack rocks</strong> ready for the corners!">> <<goto "Property_TrapHouse">> <</link>><br> <</if>> <<if _maxCook >= 10>> <<link `"[ 🍳 Cook All Available (" + _maxCook + " Coke + " + _maxCook + " Soda → " + (_maxCook * 3) + " Crack | " + (Math.min(180, _maxCook * 8)) + " mins) ]"`>> <<set $time += Math.min(180, _maxCook * 8)>> <<set $inventory.cocaine -= _maxCook>> <<set $inventory.baking_soda -= _maxCook>> <<set $inventory.crack += (_maxCook * 3)>> <<set $traphouse_msg to "You work continuously through the fumes, mass-producing rock after rock until all precursors are spent. Total yield: <strong>" + (_maxCook * 3) + " Crack rocks</strong>!">> <<goto "Property_TrapHouse">> <</link>><br> <</if>> <<if _maxCook is 0>> <span style="color: #777;"><em>(You need at least 1 Cocaine and 1 Box of Baking Soda to cook crack.)</em></span> <</if>> </div> <!-- PANTRY: BUY BAKING SODA --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #ffcc00; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #ffcc00;">📦 Kitchen Supply Pantry</h4> Purchase food-grade Arm & Hammer baking soda boxes for your cooks.<br> <strong>Your Wallet:</strong> <span style="color: #00ffaa;">$ $money</span><br><br> <<if $money >= 10>> <<link "[ Buy 1 Box of Baking Soda ($10) ]">> <<set $money -= 10>> <<set $inventory.baking_soda += 1>> <<set $traphouse_msg to "Bought 1 box of baking soda.">> <<goto "Property_TrapHouse">> <</link>> | <</if>> <<if $money >= 50>> <<link "[ Buy 5 Boxes ($50) ]">> <<set $money -= 50>> <<set $inventory.baking_soda += 5>> <<set $traphouse_msg to "Bought 5 boxes of baking soda.">> <<goto "Property_TrapHouse">> <</link>> | <</if>> <<if $money >= 200>> <<link "[ Buy 20 Boxes ($200) ]">> <<set $money -= 200>> <<set $inventory.baking_soda += 20>> <<set $traphouse_msg to "Bought 20 boxes of baking soda.">> <<goto "Property_TrapHouse">> <</link>> <</if>> <<if $money < 10>> <span style="color: #777;"><em>(Not enough cash for supplies.)</em></span> <</if>> </div> <!-- RUNNER STASH SAFE --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #00aaff; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #00aaff;">🔒 Reinforced Floorboard Safe (Stash)</h4> Store illicit cash and narcotics securely away from street shakedowns and arrests.<br><br> <div style="display: flex; gap: 15px; flex-wrap: wrap;"> <div style="flex: 1; min-width: 220px; background: #222; padding: 10px; border-radius: 4px;"> <strong style="color: #ffaa00;">On Your Person:</strong><br> Cash: <span style="color: #00ffaa;">$ $money</span><br> Weed: <<print $inventory.weed>> | Coke: <<print $inventory.cocaine>><br> Ecstasy: <<print $inventory.ecstasy>> | Crack: <<print $inventory.crack>> | Heroin: <<print $inventory.heroin>> </div> <div style="flex: 1; min-width: 220px; background: #222; padding: 10px; border-radius: 4px;"> <strong style="color: #00e5ff;">Safe Stash:</strong><br> Stored Cash: <span style="color: #00ffaa;">$ <<print $traphouse_stash.money>></span><br> Weed: <<print $traphouse_stash.weed>> | Coke: <<print $traphouse_stash.cocaine>><br> Ecstasy: <<print $traphouse_stash.ecstasy>> | Crack: <<print $traphouse_stash.crack>> | Heroin: <<print $traphouse_stash.heroin>> </div> </div> <br> <strong>Cash Operations:</strong><br> <<if $money > 0>> <<link "[ 💵 Deposit All Cash Into Safe ]">> <<set $traphouse_stash.money += $money>> <<set $money to 0>> <<set $traphouse_msg to "You stash your cash inside the floorboard safe.">> <<goto "Property_TrapHouse">> <</link>> <</if>> <<if $money >= 1000>> <<link "[ 💵 Deposit $1,000 ]">> <<set $money -= 1000>> <<set $traphouse_stash.money += 1000>> <<set $traphouse_msg to "Deposited $1,000 into the safe.">> <<goto "Property_TrapHouse">> <</link>> <</if>> <<if $traphouse_stash.money > 0>> <<link "[ 💸 Withdraw All Stashed Cash ]">> <<set $money += $traphouse_stash.money>> <<set $traphouse_stash.money to 0>> <<set $traphouse_msg to "You withdraw all stashed cash from the safe.">> <<goto "Property_TrapHouse">> <</link>> <</if>> <<if $traphouse_stash.money >= 1000>> <<link "[ 💸 Withdraw $1,000 ]">> <<set $traphouse_stash.money -= 1000>> <<set $money += 1000>> <<set $traphouse_msg to "Withdrew $1,000 from the safe.">> <<goto "Property_TrapHouse">> <</link>> <</if>> <br><br> <strong>Drug Operations:</strong><br> <<set _hasAnyDrugs to ($inventory.weed + $inventory.cocaine + $inventory.ecstasy + $inventory.crack + $inventory.heroin > 0)>> <<set _hasAnyStashedDrugs to ($traphouse_stash.weed + $traphouse_stash.cocaine + $traphouse_stash.ecstasy + $traphouse_stash.crack + $traphouse_stash.heroin > 0)>> <<if _hasAnyDrugs>> <<link "[ 📦 Stash All Personal Drugs ]">> <<set $traphouse_stash.weed += $inventory.weed>><<set $inventory.weed to 0>> <<set $traphouse_stash.cocaine += $inventory.cocaine>><<set $inventory.cocaine to 0>> <<set $traphouse_stash.ecstasy += $inventory.ecstasy>><<set $inventory.ecstasy to 0>> <<set $traphouse_stash.crack += $inventory.crack>><<set $inventory.crack to 0>> <<set $traphouse_stash.heroin += $inventory.heroin>><<set $inventory.heroin to 0>> <<set $traphouse_msg to "You locked all your drugs securely into the trap safe.">> <<goto "Property_TrapHouse">> <</link>> <</if>> <<if _hasAnyStashedDrugs>> <<link "[ 🎒 Take All Drugs From Safe ]">> <<set $inventory.weed += $traphouse_stash.weed>><<set $traphouse_stash.weed to 0>> <<set $inventory.cocaine += $traphouse_stash.cocaine>><<set $traphouse_stash.cocaine to 0>> <<set $inventory.ecstasy += $traphouse_stash.ecstasy>><<set $traphouse_stash.ecstasy to 0>> <<set $inventory.crack += $traphouse_stash.crack>><<set $traphouse_stash.crack to 0>> <<set $inventory.heroin += $traphouse_stash.heroin>><<set $traphouse_stash.heroin to 0>> <<set $traphouse_msg to "You retrieve your entire drug stash from the safe.">> <<goto "Property_TrapHouse">> <</link>> <</if>> </div> <!-- CRASH COUCH REST --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #888; margin-bottom: 15px; border-radius: 4px;"> <strong>🛋️ Grimy Vinyl Couch:</strong> Take a quick 30-minute nap (+20 Stamina).<br> <<link "[ 💤 Rest for 30 minutes ]">> <<set $time += 30>> <<set $stamina to Math.min($maxstamina, $stamina + 20)>> <<set $traphouse_msg to "You kick back on the worn couch for half an hour, resting your weary eyes.">> <<goto "Property_TrapHouse">> <</link>> </div> <br> [[🚪 Step Outside to Slums|Slums]]<br> [[🗺️ City Map|City_Hub]] <</nobr>>
<div @style="'border: 2px solid ' + (_borderColor || '#00ffaa') + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/outskirts.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>🏡 Suburban Grow House</h3> <<nobr>> Hidden behind the quiet facade of an Outskirts suburban residence, this property houses an advanced subterranean horticulture facility. High-output carbon scrubbers hum quietly to neutralize terpene odors, while rows of aeroponic reservoirs bubble under full-spectrum purple and gold LED fixtures. <br><br> <<if $growhouse_msg isnot undefined and $growhouse_msg isnot "">> <div style="background-color: #222; border-left: 3px solid #00ffaa; padding: 10px; margin-bottom: 15px;"> $growhouse_msg </div> <<set $growhouse_msg to "">> <</if>> <<set _currentDay to Math.floor($time / 1440)>> <!-- GROWER GANG MEMBER --> <<set _growhouse_guard to null>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "growhouse">> <<set _growhouse_guard to $gang_members[_g]>> <<break>> <</if>> <</for>> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #00ffaa; margin-bottom: 15px; border-radius: 4px;"> <strong>🌿 Master Horticulturalist:</strong> <<if _growhouse_guard isnot null>> <span style="color: #00ffaa;"><strong><<print _growhouse_guard.name>></strong> (<<print _growhouse_guard.specialty>>)</span> — Pruning foliage, regulating pH/nutrient levels, and boosting crop output (+20% harvest yield). <<else>> <span style="color: #888;">None assigned. (Assign a gang member via your Phone to tend nutrients and boost crop output).</span> <</if>> </div> <!-- HYDROPONIC BASINS STATUS --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #55ff55; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #55ff55;">🌱 Hydroponic Basins Status</h4> <<if $grow_house.crop_active is false>> <span style="color: #aaa;">The aeroponic tables are flushed, sterilized, and awaiting new seeds.</span><br><br> <strong>Available Seed Packs in Inventory:</strong><br> 🌿 Street Skunk Seeds: <span style="color: #00ffaa;">$inventory.weed_seeds_skunk</span> <em>(Takes 2 Days | Base Yield: 25 Weed)</em><br> 🌿 Neon Haze Seeds: <span style="color: #00ffaa;">$inventory.weed_seeds_haze</span> <em>(Takes 3 Days | Base Yield: 50 Weed)</em><br> 🌿 Apex Kush Seeds: <span style="color: #00ffaa;">$inventory.weed_seeds_kush</span> <em>(Takes 4 Days | Base Yield: 90 Weed)</em><br><br> <strong>Plant a New Batch:</strong><br> <<if $inventory.weed_seeds_skunk > 0>> <<link "[ 🌱 Plant Street Skunk Crop (Uses 1 Seed Pack) ]">> <<set $inventory.weed_seeds_skunk -= 1>> <<set $grow_house.crop_active to true>> <<set $grow_house.strain to "Street Skunk">> <<set $grow_house.planted_day to _currentDay>> <<set $grow_house.grow_days_needed to 2>> <<set $grow_house.harvest_qty to (_growhouse_guard !== null ? 30 : 25)>> <<set $grow_house.ready to false>> <<set $growhouse_msg to "You germinated and transplanted Street Skunk seedlings into the aeroponic basins. Lights and pumps set to 18/6 cycle.">> <<goto "Property_GrowHouse">> <</link>><br> <</if>> <<if $inventory.weed_seeds_haze > 0>> <<link "[ 🌱 Plant Neon Haze Crop (Uses 1 Seed Pack) ]">> <<set $inventory.weed_seeds_haze -= 1>> <<set $grow_house.crop_active to true>> <<set $grow_house.strain to "Neon Haze">> <<set $grow_house.planted_day to _currentDay>> <<set $grow_house.grow_days_needed to 3>> <<set $grow_house.harvest_qty to (_growhouse_guard !== null ? 60 : 50)>> <<set $grow_house.ready to false>> <<set $growhouse_msg to "You planted Neon Haze seeds into rockwool cubes under the intense purple grow lamps.">> <<goto "Property_GrowHouse">> <</link>><br> <</if>> <<if $inventory.weed_seeds_kush > 0>> <<link "[ 🌱 Plant Apex Kush Crop (Uses 1 Seed Pack) ]">> <<set $inventory.weed_seeds_kush -= 1>> <<set $grow_house.crop_active to true>> <<set $grow_house.strain to "Apex Kush">> <<set $grow_house.planted_day to _currentDay>> <<set $grow_house.grow_days_needed to 4>> <<set $grow_house.harvest_qty to (_growhouse_guard !== null ? 110 : 90)>> <<set $grow_house.ready to false>> <<set $growhouse_msg to "You planted the connoisseur Apex Kush strain. High-grade nutrient balance loaded.">> <<goto "Property_GrowHouse">> <</link>><br> <</if>> <<if $inventory.weed_seeds_skunk is 0 and $inventory.weed_seeds_haze is 0 and $inventory.weed_seeds_kush is 0>> <span style="color: #777;"><em>(You do not have any weed seeds. Order seed packs from the catalog below.)</em></span> <</if>> <<elseif $grow_house.ready is false>> <<set _daysPassed to Math.max(0, _currentDay - $grow_house.planted_day)>> <strong>Active Strain:</strong> <span style="color: #00ffaa;">$grow_house.strain</span><br> <strong>Growth Cycle:</strong> Day <<print _daysPassed>> of <<print $grow_house.grow_days_needed>><br> <div style="background: #333; width: 100%; height: 12px; border-radius: 6px; margin: 8px 0; overflow: hidden;"> <div @style="'background: #00ffaa; width: ' + Math.min(100, Math.floor((_daysPassed / $grow_house.grow_days_needed) * 100)) + '%; height: 100%;'"></div> </div> <span style="color: #ffaa00;">Status: Vegetative / Flowering phase. Automatic pumps circulating nutrient solution. Crop will be ready in <<print Math.max(1, $grow_house.grow_days_needed - _daysPassed)>> day(s).</span> <<else>> <strong>Active Strain:</strong> <span style="color: #00ffaa;">$grow_house.strain</span><br> <span style="color: #00ffaa; font-weight: bold; font-size: 1.1em;">🌿 CROP IS FULLY MATURED AND READY FOR HARVEST!</span><br> Estimated Yield: <span style="color: #ffd700;"><strong>$grow_house.harvest_qty units of top-shelf Weed</strong></span><br><br> <<link "[ ✂️ Harvest & Dry Crop (Takes 45 mins) ]">> <<set $time += 45>> <<set $inventory.weed += $grow_house.harvest_qty>> <<set _harvestedQty to $grow_house.harvest_qty>> <<set _strainName to $grow_house.strain>> <<set $grow_house.crop_active to false>> <<set $grow_house.strain to "none">> <<set $grow_house.ready to false>> <<set $grow_house.harvest_qty to 0>> <<set $growhouse_msg to "You clip down the resinous, frosted colas of " + _strainName + ", trim off fan leaves, and dry them in the curing tent. You bagged <strong>" + _harvestedQty + " units of fresh Weed</strong>!">> <<goto "Property_GrowHouse">> <</link>> <</if>> </div> <!-- SEED CATALOG --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #ffcc00; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #ffcc00;">📦 Discreet Seed Catalog & Supplies</h4> Order feminized genetics shipped straight to the suburban drop-box.<br> <strong>Your Wallet:</strong> <span style="color: #00ffaa;">$ $money</span><br><br> <<if $money >= 200>> <<link "[ Order Street Skunk Seeds ($200) ]">> <<set $money -= 200>> <<set $inventory.weed_seeds_skunk += 1>> <<set $growhouse_msg to "Purchased 1 pack of Street Skunk seeds.">> <<goto "Property_GrowHouse">> <</link>> | <</if>> <<if $money >= 500>> <<link "[ Order Neon Haze Seeds ($500) ]">> <<set $money -= 500>> <<set $inventory.weed_seeds_haze += 1>> <<set $growhouse_msg to "Purchased 1 pack of Neon Haze seeds.">> <<goto "Property_GrowHouse">> <</link>> | <</if>> <<if $money >= 1000>> <<link "[ Order Apex Kush Seeds ($1,000) ]">> <<set $money -= 1000>> <<set $inventory.weed_seeds_kush += 1>> <<set $growhouse_msg to "Purchased 1 pack of Apex Kush seeds.">> <<goto "Property_GrowHouse">> <</link>> | <</if>> <<if $money >= 20>> <<link "[ Buy Rolling Papers Pack ($20 — 10 papers) ]">> <<set $money -= 20>> <<set $inventory.rolling_papers += 10>> <<set $growhouse_msg to "Purchased 10 rolling papers.">> <<goto "Property_GrowHouse">> <</link>> <</if>> </div> <!-- ROLLING BENCH --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #aa00ff; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #aa00ff;">💨 Rolling & Packaging Bench</h4> Weed: <span style="color: #00ffaa;">$inventory.weed</span> | Rolling Papers: <span style="color: #00ffaa;">$inventory.rolling_papers</span><br><br> <<if $inventory.weed >= 1 and $inventory.rolling_papers >= 1>> <<link "[ 🚬 Roll and Smoke a Fat Joint (Restores 30 Stamina | 15 mins) ]">> <<set $time += 15>> <<set $inventory.weed -= 1>> <<set $inventory.rolling_papers -= 1>> <<set $stamina to Math.min($maxstamina, $stamina + 30)>> <<set $growhouse_msg to "You grind up fresh bud, roll a tight cone, and smoke it while listening to the humming exhaust fans. Your tension dissolves (+30 Stamina).">> <<goto "Property_GrowHouse">> <</link>><br> <</if>> <<if $inventory.weed < 1 or $inventory.rolling_papers < 1>> <span style="color: #777;"><em>(Requires at least 1 Weed and 1 Rolling Paper.)</em></span> <</if>> </div> <!-- BEDROOM SLEEP --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #00aaff; margin-bottom: 15px; border-radius: 4px;"> <strong>🛏️ Upstairs Master Bedroom:</strong> Sleep soundly in the furnished suburban master suite.<br> <<link "[ 🌙 Sleep until 9:00 AM (Refills Stamina) ]">> <<set _nextMorning to (Math.floor($time / 1440) * 1440) + 1440 + 540>> <<set $time to _nextMorning>> <<set $stamina to $maxstamina>> <<set $health to Math.min($maxhealth, $health + 30)>> <<endOfDayChecks>> <<set $growhouse_msg to "You wake up at 9:00 AM feeling well rested. The morning sun filters softly through the blinds.">> <<goto "Property_GrowHouse">> <</link>> </div> <br> [[🚪 Step Outside to Outskirts|Outskirts]]<br> [[🗺️ City Map|City_Hub]] <</nobr>>
<div @style="'border: 2px solid ' + (_borderColor || '#00aaff') + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/port.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>🏭 Industrial Chemical Lab</h3> <<nobr>> Located in a secluded corrugated steel wharf warehouse at the edge of the Port, this illicit facility is engineered for high-throughput narcotic processing and maritime export. Condensation drips from heavy ceiling condensers while vacuum pumps hum steadily. A 20-ton hydraulic rotary tablet press dominates the main floor, while a direct reinforced loading bay rollup door opens directly over deep water for offshore maritime drops. <br><br> <<if $chemlab_msg isnot undefined and $chemlab_msg isnot "">> <div style="background-color: #222; border-left: 3px solid #00ffaa; padding: 10px; margin-bottom: 15px;"> $chemlab_msg </div> <<set $chemlab_msg to "">> <</if>> <!-- LAB SECURITY GANG MEMBER --> <<set _chemlab_guard to null>> <<for _g to 0; _g < $gang_members.length; _g++>> <<if $gang_members[_g].assignment is "chemlab">> <<set _chemlab_guard to $gang_members[_g]>> <<break>> <</if>> <</for>> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #ff4444; margin-bottom: 15px; border-radius: 4px;"> <strong>🛡️ Tactical Lab Security:</strong> <<if _chemlab_guard isnot null>> <span style="color: #00ffaa;"><strong><<print _chemlab_guard.name>></strong> (<<print _chemlab_guard.specialty>>)</span> — Heavily armed sentry guarding chemical stocks and dock deliveries (-1 Heat per night). <<else>> <span style="color: #888;">None assigned. (Assign a gang soldier via your Phone to deter raids and manage loading dock security).</span> <</if>> </div> <!-- HYDRAULIC ROTARY PILL PRESS --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #00e5ff; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #00e5ff;">⚙️ Hydraulic Rotary Ecstasy Pill Press</h4> Compress pure MDMA crystal powder and binders into high-demand stamped party tablets.<br> <strong>Recipe:</strong> 1 Ecstasy crystal + 1 Box of Pill Binders → <strong>3 Pressed Ecstasy Tablets</strong>.<br> Ecstasy: <span style="color: #00ffaa;">$inventory.ecstasy</span> | Pill Binders: <span style="color: #00ffaa;">$inventory.pill_binders</span><br><br> <<set _maxPress to Math.min($inventory.ecstasy, $inventory.pill_binders)>> <<if _maxPress >= 1>> <strong>Choose Stamp & Stamp Batch:</strong><br> <<link "[ ⚡ Press 1 Batch — Neon Tesla (1 Ecstasy + 1 Binder → 3 Pills | 15 mins) ]">> <<set $time += 15>> <<set $inventory.ecstasy -= 1>> <<set $inventory.pill_binders -= 1>> <<set $inventory.ecstasy += 3>> <<set $chemlab_msg to "The hydraulic die slams down with 15 tons of pressure, stamping out <strong>3 pristine Neon Tesla ecstasy tablets</strong>!">> <<goto "Property_ChemLab">> <</link>><br> <<link "[ 👑 Press 1 Batch — Golden Rolex (1 Ecstasy + 1 Binder → 3 Pills | 15 mins) ]">> <<set $time += 15>> <<set $inventory.ecstasy -= 1>> <<set $inventory.pill_binders -= 1>> <<set $inventory.ecstasy += 3>> <<set $chemlab_msg to "The press stamps out <strong>3 gleaming Golden Rolex ecstasy tablets</strong>!">> <<goto "Property_ChemLab">> <</link>><br> <<link "[ 💀 Press 1 Batch — Punisher Skull (1 Ecstasy + 1 Binder → 3 Pills | 15 mins) ]">> <<set $time += 15>> <<set $inventory.ecstasy -= 1>> <<set $inventory.pill_binders -= 1>> <<set $inventory.ecstasy += 3>> <<set $chemlab_msg to "The press stamps out <strong>3 deadly-potent Punisher Skull tablets</strong>!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if _maxPress >= 5>> <<link "[ ⚡ Mass-Press 5 Batches — Neon Tesla (5 Ecstasy + 5 Binders → 15 Pills | 45 mins) ]">> <<set $time += 45>> <<set $inventory.ecstasy -= 5>> <<set $inventory.pill_binders -= 5>> <<set $inventory.ecstasy += 15>> <<set $chemlab_msg to "The rotary press spits out a steady rhythm of <strong>15 Neon Tesla pills</strong> into the catchment hopper!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if _maxPress >= 10>> <<link `"[ ⚙️ Run Full Auto Batch (" + _maxPress + " Ecstasy + " + _maxPress + " Binders → " + (_maxPress * 3) + " Pills | " + (Math.min(180, _maxPress * 6)) + " mins) ]"`>> <<set $time += Math.min(180, _maxPress * 6)>> <<set $inventory.ecstasy -= _maxPress>> <<set $inventory.pill_binders -= _maxPress>> <<set $inventory.ecstasy += (_maxPress * 3)>> <<set $chemlab_msg to "The hopper continuously feeds powder under industrial pressure, yielding <strong>" + (_maxPress * 3) + " premium stamped Ecstasy pills</strong>!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if _maxPress is 0>> <span style="color: #777;"><em>(Requires at least 1 Ecstasy crystal and 1 Box of Pill Binders.)</em></span> <</if>> </div> <!-- CUTTING & DILUTION VATS --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #ffd700; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #ffd700;">🧪 Cutting & Dilution Vats</h4> Stretch your cocaine and heroin volume using industrial cutting agents (Inositol/Mannitol).<br> <strong>Recipe:</strong> 1 Pure Drug + 1 Cutting Agent → <strong>2 Street-Cut Drug Units</strong>.<br> Coke: <span style="color: #00ffaa;">$inventory.cocaine</span> | Heroin: <span style="color: #00ffaa;">$inventory.heroin</span> | Cutting Agent: <span style="color: #00ffaa;">$inventory.cutting_agent</span><br><br> <<if $inventory.cocaine >= 1 and $inventory.cutting_agent >= 1>> <<link "[ 🧂 Cut 1 Cocaine (1 Coke + 1 Cut Agent → 2 Coke | 15 mins) ]">> <<set $time += 15>> <<set $inventory.cocaine += 1>> <<set $inventory.cutting_agent -= 1>> <<set $chemlab_msg to "You blend pure fishscale cocaine with cutting agent, doubling the street volume to 2 units.">> <<goto "Property_ChemLab">> <</link>> | <</if>> <<if $inventory.cocaine >= 5 and $inventory.cutting_agent >= 5>> <<link "[ 🧂 Cut 5 Cocaine (5 Coke + 5 Cut Agent → 10 Coke | 30 mins) ]">> <<set $time += 30>> <<set $inventory.cocaine += 5>> <<set $inventory.cutting_agent -= 5>> <<set $chemlab_msg to "You homogenize a 5-unit batch in the rotary mixer, yielding 10 units of street-grade cocaine.">> <<goto "Property_ChemLab">> <</link>> <</if>> <br> <<if $inventory.heroin >= 1 and $inventory.cutting_agent >= 1>> <<link "[ 💉 Cut 1 Heroin (1 Heroin + 1 Cut Agent → 2 Heroin | 15 mins) ]">> <<set $time += 15>> <<set $inventory.heroin += 1>> <<set $inventory.cutting_agent -= 1>> <<set $chemlab_msg to "You dilute brown sugar heroin with powder, yielding 2 street bags.">> <<goto "Property_ChemLab">> <</link>> | <</if>> <<if $inventory.heroin >= 5 and $inventory.cutting_agent >= 5>> <<link "[ 💉 Cut 5 Heroin (5 Heroin + 5 Cut Agent → 10 Heroin | 30 mins) ]">> <<set $time += 30>> <<set $inventory.heroin += 5>> <<set $inventory.cutting_agent -= 5>> <<set $chemlab_msg to "You blend 5 units of heroin into 10 bags ready for street distribution.">> <<goto "Property_ChemLab">> <</link>> <</if>> <<if $inventory.cutting_agent is 0>> <br><span style="color: #777;"><em>(Requires Cutting Agent. Buy below.)</em></span> <</if>> </div> <!-- CHEMICAL REAGENT SUPPLY --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #ffaa00; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #ffaa00;">📦 Industrial Precursor Orders</h4> Your Wallet: <span style="color: #00ffaa;">$ $money</span><br><br> <<if $money >= 100>> <<link "[ Order Pill Binders (Bulk 5-pack — $100) ]">> <<set $money -= 100>> <<set $inventory.pill_binders += 5>> <<set $chemlab_msg to "Received 5 packs of food-grade pill binders.">> <<goto "Property_ChemLab">> <</link>> | <</if>> <<if $money >= 75>> <<link "[ Order Cutting Agent (Bulk 5-pack — $75) ]">> <<set $money -= 75>> <<set $inventory.cutting_agent += 5>> <<set $chemlab_msg to "Received 5 packs of cutting agent.">> <<goto "Property_ChemLab">> <</link>> <</if>> </div> <!-- WHOLESALE DOCK EXPORT (CLEAN OFFSHORE CASH) --> <div style="background-color: #1a1a1a; padding: 12px; border-left: 3px solid #00ffaa; margin-bottom: 15px; border-radius: 4px;"> <h4 style="margin: 0 0 8px 0; color: #00ffaa;">🚢 Deepwater Dock Loading Bay (Offshore Wholesale Export)</h4> Offload bulk product directly into maritime shipping containers and offshore speedboats. Buyers wire payments directly into your <strong>Offshore Clean Funds ($laundered_money)</strong> with <strong>ZERO Heat</strong> generated!<br> <strong>Current Clean Offshore Balance:</strong> <span style="color: #00ffaa;">$ $laundered_money</span><br><br> <<set _exportMult to ($traits.dealer_3 is true ? 1.50 : ($traits.dealer_2 is true ? 1.25 : 1.0))>> <strong>Wholesale Export Contracts (Minimum 25 units)<<if _exportMult > 1>> <span style="color:#ffd700;">(+<<print Math.round((_exportMult - 1) * 100)>>% Kingpin Bonus)</span><</if>>:</strong><br> <<if $inventory.weed >= 25>> <<set _wVal to Math.floor(625 * _exportMult)>> <<link `"[ 🚢 Export 25 Weed ($" + _wVal + " Offshore Clean) ]"`>> <<set $inventory.weed -= 25>> <<set $laundered_money += _wVal>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + 25>> <<set $chemlab_msg to "You crane 25 units of vacuum-sealed weed into a container bound for Europe. $" + _wVal + " clean wired to your offshore account!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if $inventory.cocaine >= 25>> <<set _cVal to Math.floor(3750 * _exportMult)>> <<link `"[ 🚢 Export 25 Cocaine ($" + _cVal + " Offshore Clean) ]"`>> <<set $inventory.cocaine -= 25>> <<set $laundered_money += _cVal>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + 25>> <<set $chemlab_msg to "You load 25 kilos of cocaine onto a smuggling vessel. $" + _cVal + " clean wired to your offshore account!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if $inventory.ecstasy >= 25>> <<set _eVal to Math.floor(1250 * _exportMult)>> <<link `"[ 🚢 Export 25 Ecstasy ($" + _eVal + " Offshore Clean) ]"`>> <<set $inventory.ecstasy -= 25>> <<set $laundered_money += _eVal>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + 25>> <<set $chemlab_msg to "You dispatch 25 bags of stamped ecstasy onto an offshore cruiser. $" + _eVal + " clean wired to your offshore account!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if $inventory.crack >= 25>> <<set _crVal to Math.floor(1500 * _exportMult)>> <<link `"[ 🚢 Export 25 Crack ($" + _crVal + " Offshore Clean) ]"`>> <<set $inventory.crack -= 25>> <<set $laundered_money += _crVal>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + 25>> <<set $chemlab_msg to "You ship 25 units of crack to regional distributors. $" + _crVal + " clean wired to your offshore account!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if $inventory.heroin >= 25>> <<set _hVal to Math.floor(5000 * _exportMult)>> <<link `"[ 🚢 Export 25 Heroin ($" + _hVal + " Offshore Clean) ]"`>> <<set $inventory.heroin -= 25>> <<set $laundered_money += _hVal>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + 25>> <<set $chemlab_msg to "You load 25 bricks of pure heroin into an export container. $" + _hVal + " clean wired to your offshore account!">> <<goto "Property_ChemLab">> <</link>><br> <</if>> <<if $inventory.weed < 25 and $inventory.cocaine < 25 and $inventory.ecstasy < 25 and $inventory.crack < 25 and $inventory.heroin < 25>> <span style="color: #777;"><em>(Offshore buyers require at least 25 units of a single product to dispatch a cargo drop.)</em></span> <</if>> </div> <br> [[🚪 Step Outside to Port Docks|Port]]<br> [[🗺️ City Map|City_Hub]] <</nobr>>
<h3>Club Apex - Entrance</h3> The bass vibrates through the floor, thumping against your chest. Neon lights sweep over the packed crowd on the main floor ahead. To your right, a massive bouncer in a tailored suit guards a velvet rope leading up a staircase. <strong>Your Wallet:</strong> $<<print $money>> <hr style="border-color: #444;"> <<link "Head to the Main Floor">><<goto "Club_Normal_Floor">><</link>><br><br> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ffd700;"> <h4>VIP Lounge</h4> <<if $vip_club_card is true>> The bouncer recognizes you, unclipping the velvet rope with a respectful nod. <br><br> <<link "Go upstairs to the VIP Floor">><<goto "Club_VIP_Floor">><</link>> <<else>> The bouncer blocks your path. "Members only. Lifetime cards are $5,000, and we don't sell to nobodies." <br><br> <<if $rep_level >= 5>> <<if $money >= 5000>> <<link "Buy a VIP Card ($5,000)">> <<set $money -= 5000>> <<set $vip_club_card to true>> <<goto "Club_VIP_Floor">> <</link>> <<else>> <span style="color: #ff4444;"><em>You have the reputation, but not the cash.</em></span> <</if>> <<else>> <span style="color: #555;"><em>Requires Reputation Level 5. Come back when you're a made man.</em></span> <</if>> <</if>> </div> <br><br> <<link "Leave the Club">><<goto "Neon">><</link>>
<h3>Bruno's Bar, Bed and Breakfast - Dive Bar</h3> The air is thick with stale cigarette smoke and cheap beer. A few rough-looking men are playing pool in the corner, while others size you up from the bar. This is the perfect place to find cheap muscle. <<nobr>> <strong>Your Wallet:</strong> $<<print $money>> <strong>Gang Size:</strong> <<print $gang_members.length>> members <br><hr style="border-color: #444;"><br> [[Approach the Counter|Outskirt_Bar_Counter]]<br> /* --- GÉNÉRATION D'UNE RECRUE QUOTIDIENNE (AVEC RARETÉ) --- */ <<if $daily_bar_recruit is undefined>> <<set _rarityRoll to random(1, 100)>> <<if _rarityRoll <= 85>> /* 85% de chance : Homme de main standard */ <<set $daily_bar_recruit to { name: $name_pool_thugs.random(), type: "Street Thug", specialty: "none", strength: random(3, 5), loyalty: random(40, 60), upkeep: random(40, 70), assignment: "idle" }>> <<else>> /* 15% de chance : Spécialiste des bas-fonds */ <<set _spec_pool to ["Warden", "Smuggler","Driver"]>> <<set _rolled_spec to _spec_pool.random()>> <<set $daily_bar_recruit to { name: $name_pool_thugs.random(), type: "Specialist - " + _rolled_spec, specialty: _rolled_spec, strength: random(4, 6), loyalty: random(50, 70), upkeep: random(100, 150), /* Ils coûtent plus cher à entretenir */ assignment: "idle" }>> <</if>> <</if>> /* --- AFFICHAGE DE LA RECRUE --- */ <<if $daily_bar_recruit is "hired">> <em>You already hired the most promising thug here today. The rest are too drunk to hold a conversation. Come back tomorrow.</em> <<else>> <<if $daily_bar_recruit.specialty isnot "none">> A man sitting alone in the shadows catches your eye. He has a distinct aura about him. "You look like someone who needs specialized talents," he says quietly. <<else>> A tough-looking guy nursing a whiskey nods at you. "Word is you're looking for guys who aren't afraid to get their hands dirty. I'm looking for work." <</if>> <br><br> <<set _borderColor to ($daily_bar_recruit.specialty isnot "none" ? "#aa00ff" : "#ffaa00")>> /* Définition du niveau requis */ <<set _reqLevel to ($daily_bar_recruit.specialty isnot "none" ? 5 : 3)>> <div @style="'background-color: #1a1a1a; padding: 15px; border-left: 3px solid ' + _borderColor + ';'"> <strong><<print $daily_bar_recruit.name>></strong> (<<print $daily_bar_recruit.type>>)<br> <<if $daily_bar_recruit.specialty is "Warden">> <span style="color: #aa00ff;"><em>Trait: The Breaker (Boosts passive discipline gains for captives in the basement).</em></span><br> <<elseif $daily_bar_recruit.specialty is "Smuggler">> <span style="color: #aa00ff;"><em>Trait: The Smuggler (Diverts a harbor contraband crate every 3 to 7 days into Warehouse 12, plus boosts Chop Shop income).</em></span><br> <<elseif $daily_bar_recruit.specialty is "Driver">> <span style="color: #aa00ff;"><em>Trait: The Booster (Steals a vehicle every 3 to 7 days and stashes it in your Underground Garage, plus boosts Chop Shop income).</em></span><br> <</if>> <br> <strong>Combat Strength:</strong> <<print $daily_bar_recruit.strength>> / 10<br> <strong>Base Loyalty:</strong> <<print $daily_bar_recruit.loyalty>> / 100<br> <strong>Daily Wage:</strong> $<<print $daily_bar_recruit.upkeep>>/day<br> <br> <<set _hiringBonus to ($daily_bar_recruit.specialty isnot "none" ? 500 : 200)>> <strong>Hiring Bonus:</strong> $<<print _hiringBonus>><br> <strong>Reputation Required:</strong> Level <<print _reqLevel>> <br><br> /* --- VÉRIFICATION DU NIVEAU ET DE L'ARGENT --- */ <<if $rep_level >= _reqLevel>> <<if $money >= _hiringBonus>> <<link "Hire " + $daily_bar_recruit.name + " ($" + _hiringBonus + ")">> <<set $money -= _hiringBonus>> <<set $daily_bar_recruit.custom_weapon to "inherited">> <<set $daily_bar_recruit.custom_armor to "inherited">> <<run $gang_members.push($daily_bar_recruit)>> <<set $daily_bar_recruit to "hired">> <<goto "Location_OutskirtsBar">> <</link>> <<else>> <span style="color: #ff4444;"><em>You don't have enough money to pay his hiring bonus.</em></span> <</if>> <<else>> <span style="color: #ff4444;"><em>He chuckles and looks away. "Come back when you've made a name for yourself in this city, rookie."</em></span> <</if>> </div> <</if>> <br>---<br> [[Go to the Toilets|Bar_Toilets]]<br> <</nobr>> <<link "Leave the Bar">><<goto "Outskirts">><</link>>
<h3>Financial District - Police Station</h3> <<nobr>> You walk into the heavily air-conditioned lobby of the local precinct. Uniformed officers mill about, and the smell of stale coffee and cheap floor wax fills the air. Officer Davis is manning the front desk today. <br><br> /* --- SÉCURITÉ SI LA VARIABLE N'EXISTE PAS ENCORE --- */ <<if $daily_station_seduced is undefined>><<set $daily_station_seduced to false>><</if>> /* --- RECHERCHE DES FILLES ARRÊTÉES --- */ <<set _arrested_girls to []>> <<for _i to 0; _i < $network_girls.length; _i++>> <<if $network_girls[_i].status is "arrested">> <<run _arrested_girls.push({ index: _i, girl: $network_girls[_i] })>> <</if>> <</for>> /* --- AFFICHAGE DE L'INTERFACE --- */ <<if $evidence_room isnot undefined and $evidence_room.active is true>> <div style="background-color: #1a2a1a; padding: 12px; border-left: 4px solid #00ffaa; margin-bottom: 20px;"> <strong>📦 Police Evidence Room Claim:</strong><br> Your confiscated personal property from your recent incarceration is stored in the basement Evidence Locker.<br><br> <<link "[ Reclaim Confiscated Money, Weapons & Stash ]">> <<set $money += $evidence_room.money>> <<for _w to 0; _w < $evidence_room.weapons.length; _w++>> <<if not $inventory.weapons.includes($evidence_room.weapons[_w])>> <<run $inventory.weapons.push($evidence_room.weapons[_w])>> <</if>> <</for>> <<set $active_melee to $evidence_room.active_melee>> <<set $active_firearm to $evidence_room.active_firearm>> <<set $inventory.ammo += $evidence_room.ammo>> <<set $inventory.weed += $evidence_room.weed>> <<set $inventory.cocaine += $evidence_room.cocaine>> <<set $inventory.ecstasy += $evidence_room.ecstasy>> <<set $inventory.crack += $evidence_room.crack>> <<set $inventory.heroin += $evidence_room.heroin>> <<set $evidence_room.active to false>> <<set $evidence_room.money to 0>> <<set $evidence_room.weapons to []>> <<goto "Location_PoliceStation">> <</link>> </div> <</if>> <<if _arrested_girls.length is 0>> You have no active business here today. Officer Davis ignores you, typing away at her computer. Considering your line of work, you decide it's best not to linger around cops unnecessarily. <br><br> <<else>> You approach the front desk. You have employees locked up in the holding cells downstairs and time is running out. <br><br> /* --- CALCUL DE LA CAUTION --- */ <<set _bailCost to 1500+($rep_level*300)>> <<if $daily_station_seduced is true>> <<set _bailCost to 500+($rep_level*100)>> <span style="color: #ffaa00;"><em>Thanks to your "private negotiations" with Officer Davis, the bail administrative fees have been heavily discounted.</em></span><br><br> <</if>> /* --- BOUTON DE COMPÉTENCE (CHARISME) --- */ <<if $daily_station_seduced is false>> <div style="background-color: #222; padding: 10px; border-left: 3px solid #ff44aa; margin-bottom: 20px;"> Officer Davis looks bored and overworked. You know how the system works... Maybe a little charm could convince her to lower those outrageous "administrative fees". <br><br> <<link "Flirt with Officer Davis (Charisma Check)">> <<goto "Action_PoliceSeduction">> <</link>> </div> <<elseif $daily_station_seduced is "failed">> <span style="color: #888;"><em>Officer Davis is coldly ignoring you. You'll have to pay the full price today.</em></span><br><br> <</if>> /* --- AFFICHAGE DES FILLES --- */ <<for _j to 0; _j < _arrested_girls.length; _j++>> <<set _target to _arrested_girls[_j]>> <<capture _target, _bailCost>> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ff4444; margin-bottom: 10px;"> <strong><<print _target.girl.name>></strong> (<<print _target.girl.race.toUpperFirst()>>)<br> <strong>Status:</strong> Held in custody (Vice Squad).<br> <strong>Bail:</strong> <strong style="color: #ffaa00;">$<<print _bailCost>></strong><br> <<if $money >= _bailCost>> <<link "Pay Bail & Release Her">> <<set $money -= _bailCost>> <<set $network_girls[_target.index].status to "active">> <<set $network_girls[_target.index].location to "hideout">> <<set $network_girls[_target.index].days_in_trouble to 0>> <<goto "Location_PoliceStation">> <</link>> <<else>> <span style="color: #ff4444;"><em>You don't have enough money to bail her out right now.</em></span> <</if>> </div> <</capture>> <</for>> <</if>> <</nobr>> --- <<link "Leave the station and return to the streets">> <<goto "Financial">> <</link>>
<h3>Dynasty Real Estate</h3> <<nobr>> <<if $player_housing_rented is undefined>><<set $player_housing_rented to false>><</if>> The sleek glass doors slide open silently. Inside, the air conditioning is crisp, and a sharply dressed agent smiles at you from behind a marble desk. <em>"Looking to elevate your lifestyle, sir? We offer both flexible executive leases and full deed acquisitions. Per federal compliance laws, all real estate transactions must be wired from a verified <strong>Clean Offshore Account</strong>."</em> <br><br> <strong>Clean Offshore Balance:</strong> <span style="color: #00ffaa;">$<<print $laundered_money>></span> | <strong>Street Wallet (Unwashed):</strong> <span style="color: #888;">$<<print $money>></span> | <strong>Current Reputation:</strong> Level <<print $rep_level>> <br><hr style="border-color: #444;"><br> /* ========================================================= */ /* 1. SECURED HOUSE (OUTSKIRTS) — SI NON HABITÉ OU SI LOUÉ */ /* ========================================================= */ <<if $player_housing is 0>> <div style="background-color: #111; padding: 15px; border-left: 3px solid #ffaa00; margin-bottom: 15px;"> <h4>🏡 Secured House (Outskirts)</h4> A standalone property with a high fence, security cameras, and a private garage. Essential for any rising boss looking to command respect past Level 5. <br><br> <strong>Requirement:</strong> Reputation Level 5<br> <strong>Lease Option (Rent):</strong> <span style="color: #00e5ff;">$2,500 Offshore / week</span> <em>(First week paid upfront; can buy out the deed later)</em><br> <strong>Full Purchase Price:</strong> <span style="color: #00ffaa;">$50,000 Offshore</span> <em>(Replaces rent with a $600/week property tax)</em><br><br> <<if $rep_level >= 5>> <<if $laundered_money >= 2500>> <<link "[ 🔑 Sign Weekly Lease — Rent Secured House ($2,500 Offshore upfront) ]">> <<set $laundered_money -= 2500>> <<set $player_housing to 1>> <<set $player_housing_rented to true>> <<goto "Location_RealEstateAgency">> <</link>><br><br> <<else>> <span style="color: #ff4444;"><em>You need at least $2,500 in Clean Offshore Funds to sign the weekly lease. (Launder cash at Apex Management or via Meridian Freight).</em></span><br><br> <</if>> <<if $laundered_money >= 50000>> <<link "[ 🏛️ Buy Outright — Purchase Secured House Deed ($50,000 Offshore) ]">> <<set $laundered_money -= 50000>> <<set $player_housing to 1>> <<set $player_housing_rented to false>> <<goto "Location_RealEstateAgency">> <</link>> <<else>> <span style="color: #888;"><em>(Requires $50,000 in Clean Offshore Funds to purchase the property deed outright.)</em></span> <</if>> <<else>> <span style="color: #888;"><em>The agent politely notes your reputation isn't high enough for this neighborhood yet. (Requires Level 5)</em></span> <</if>> </div> <<elseif $player_housing is 1 and $player_housing_rented is true>> <div style="background-color: #141a22; padding: 15px; border-left: 3px solid #00e5ff; margin-bottom: 15px;"> <h4>🏡 Secured House (Outskirts) — <span style="color: #00e5ff;">CURRENTLY RENTING</span></h4> You are currently leasing this property for <strong>$2,500 / week</strong>. You may purchase the deed outright at any time using Clean Offshore Funds to eliminate the weekly lease (leaving only the standard $600/week homeowner property tax). <br><br> <strong>Buyout Price:</strong> <span style="color: #00ffaa;">$50,000 Offshore</span><br><br> <<if $laundered_money >= 50000>> <<link "[ 🏛️ Buy Out the Deed for Secured House ($50,000 Offshore) ]">> <<set $laundered_money -= 50000>> <<set $player_housing_rented to false>> <<goto "Location_RealEstateAgency">> <</link>> <<else>> <span style="color: #888;"><em>You need $50,000 in Clean Offshore Funds to buy out the deed for your Secured House.</em></span> <</if>> </div> <</if>> /* ========================================================= */ /* 2. THE APEX PENTHOUSE (NEON / FINANCIAL) */ /* ========================================================= */ <<if $player_housing is 1>> <div style="background-color: #111; padding: 15px; border-left: 3px solid #00ffaa; margin-bottom: 15px;"> <h4>🏙️ The Apex Penthouse (Financial / Neon District)</h4> The crown jewel of the city. Bulletproof floor-to-ceiling windows, private elevator, and an unparalleled view of your empire. Required to ascend past Reputation Level 10. <br><br> <strong>Requirement:</strong> Reputation Level 10<br> <strong>Lease Option (Rent):</strong> <span style="color: #00e5ff;">$18,000 Offshore / week</span> <em>(First week paid upfront; can buy out the deed later)</em><br> <strong>Full Purchase Price:</strong> <span style="color: #00ffaa;">$500,000 Offshore</span> <em>(Replaces rent with a $2,500/week luxury property tax)</em><br><br> <<if $rep_level >= 10>> <<if $laundered_money >= 18000>> <<link "[ 🔑 Sign Executive Lease — Rent The Apex Penthouse ($18,000 Offshore upfront) ]">> <<set $laundered_money -= 18000>> <<set $player_housing to 2>> <<set $player_housing_rented to true>> <<goto "Location_RealEstateAgency">> <</link>><br><br> <<else>> <span style="color: #ff4444;"><em>You need at least $18,000 in Clean Offshore Funds to sign the executive penthouse lease.</em></span><br><br> <</if>> <<if $laundered_money >= 500000>> <<link "[ 🏛️ Buy Outright — Purchase The Apex Penthouse Deed ($500,000 Offshore) ]">> <<set $laundered_money -= 500000>> <<set $player_housing to 2>> <<set $player_housing_rented to false>> <<goto "Location_RealEstateAgency">> <</link>> <<else>> <span style="color: #888;"><em>(Requires $500,000 in Clean Offshore Funds to purchase the penthouse deed outright.)</em></span> <</if>> <<else>> <span style="color: #888;"><em>The board requires a higher profile client for this exclusive property. (Requires Level 10)</em></span> <</if>> </div> <<elseif $player_housing is 2 and $player_housing_rented is true>> <div style="background-color: #141a22; padding: 15px; border-left: 3px solid #00e5ff; margin-bottom: 15px;"> <h4>🏙️ The Apex Penthouse — <span style="color: #00e5ff;">CURRENTLY RENTING</span></h4> You are currently leasing the Apex Penthouse for <strong>$18,000 / week</strong>. You may purchase the deed outright at any time using Clean Offshore Funds to replace the lease with the standard $2,500/week luxury property tax. <br><br> <strong>Buyout Price:</strong> <span style="color: #00ffaa;">$500,000 Offshore</span><br><br> <<if $laundered_money >= 500000>> <<link "[ 🏛️ Buy Out the Deed for The Apex Penthouse ($500,000 Offshore) ]">> <<set $laundered_money -= 500000>> <<set $player_housing_rented to false>> <<goto "Location_RealEstateAgency">> <</link>> <<else>> <span style="color: #888;"><em>You need $500,000 in Clean Offshore Funds to buy out the deed for The Apex Penthouse.</em></span> <</if>> </div> <<elseif $player_housing is 2 and $player_housing_rented is false>> <div style="padding: 15px; text-align: center; color: #00ffaa; border: 1px solid #00ffaa;"> <em>"You already own the deed to the finest property we have, sir. Enjoy the view from the top."</em> </div> <</if>> <br><hr style="border-color: #444;"><br> <h3>🏢 Commercial & Underworld Real Estate — Suburban Horticulture</h3> <p style="color: #aaa; font-size: 0.9em; margin-bottom: 15px;"> The senior broker closes the double doors and lowers their voice. <em>"Dynasty Real Estate deals strictly in high-value, vetted municipal and suburban properties. If you are seeking low-income fixer-uppers in the Slums, we suggest checking community classifieds on NeonList. And if you are searching for off-grid maritime or chemical facilities at the Port, those trade strictly on encrypted DarkNet marketplaces. What we can offer you is an exclusive, quiet suburban property fitted with heavy-duty electrical service and discretion."</em> </p> <<if $empire_properties === undefined>> <<set $empire_properties to { hangar: { owned: false, capacity: 10, level: 1 }, brothel: { owned: false, capacity: 5, level: 1, lobbying_done: false }, escort: { owned: false, capacity: 3, level: 1 }, traphouse: { owned: false, rented: false, level: 1 }, growhouse: { owned: false, rented: false, level: 1 }, chemlab: { owned: false, rented: false, level: 1 } }>> <<else>> <<if $empire_properties.growhouse is undefined>><<set $empire_properties.growhouse to { owned: false, rented: false, level: 1 }>><</if>> <</if>> <!-- 2. SUBURBAN GROW HOUSE --> <div style="background-color: #121a14; padding: 14px; border-left: 3px solid #00ffaa; border-radius: 4px; margin-bottom: 14px;"> <h4 style="margin: 0 0 6px 0; color: #00ffaa;">🏡 Suburban Grow House (Outskirts)</h4> A quiet, split-level suburban house with high cedar fencing and a sealed basement fitted for 4 automated hydroponic basins, high-output LED arrays, and carbon scrubbers. <br><br> <strong>Requirement:</strong> Reputation Level 4<br> <strong>Lease:</strong> <span style="color: #00e5ff;">$2,000 Offshore / week</span> | <strong>Deed:</strong> <span style="color: #00ffaa;">$65,000 Offshore</span> <em>($600/week property tax)</em><br><br> <<if $empire_properties.growhouse.owned is true>> <span style="color: #00ffaa;"><strong>[ Owned Outright — Deed in your Safe ]</strong></span><br> [[🏡 Visit Grow House|Property_GrowHouse]] <<elseif $empire_properties.growhouse.rented is true>> <span style="color: #00e5ff;"><strong>[ Currently Leased ($2,000/week) ]</strong></span><br><br> <<if $laundered_money >= 65000>> <<link "[ 🏛️ Buy Out Grow House Deed ($65,000 Offshore) ]">> <<set $laundered_money -= 65000>> <<set $empire_properties.growhouse.rented to false>> <<set $empire_properties.growhouse.owned to true>> <<goto "Location_RealEstateAgency">> <</link>> <<else>> <span style="color: #888;"><em>(Requires $65,000 Offshore to buy out deed)</em></span> <</if>> | [[🏡 Visit Grow House|Property_GrowHouse]] <<else>> <<if $rep_level >= 4>> <<if $laundered_money >= 2000>> <<link "[ 🔑 Sign Lease — Rent Grow House ($2,000 Offshore upfront) ]">> <<set $laundered_money -= 2000>> <<set $empire_properties.growhouse.rented to true>> <<goto "Location_RealEstateAgency">> <</link>> | <<else>> <span style="color: #888;">[ Lease requires $2,000 Offshore ]</span> | <</if>> <<if $laundered_money >= 65000>> <<link "[ 🏛️ Buy Outright — Purchase Deed ($65,000 Offshore) ]">> <<set $laundered_money -= 65000>> <<set $empire_properties.growhouse.owned to true>> <<goto "Location_RealEstateAgency">> <</link>> <<else>> <span style="color: #888;">[ Buy Deed requires $65,000 Offshore ]</span> <</if>> <<else>> <span style="color: #888;"><em>(Requires Reputation Level 4)</em></span> <</if>> <</if>> </div> <br>---<br> <<link "Leave the Agency">><<goto "Financial">><</link>> <</nobr>>
<h3>Tech Haven</h3> Rows of the latest gadgets glow under neon displays. A slightly overly-enthusiastic salesperson watches you from across the room. <<nobr>> <strong>Your Wallet:</strong> $<<print $money>> --- <strong>For Sale:</strong><br><br> <<if $has_phone is false>> <<if $money >= 500>> <<link "Buy the latest Smartphone ($500)">> <<set $money -= 500>> <<set $has_phone to true>> <<goto "Mall_Electronics">> <</link>><br> <<else>> //Smartphone ($500) - Not enough money.//<br> <</if>> <</if>> <<if $has_computer is false>> <<if $money >= 1000>> <<link "Buy a High-End Desktop Computer ($1000)">> <<set $money -= 1000>> <<set $has_computer to true>> <<goto "Mall_Electronics">> <</link>><br> <<else>> //Desktop Computer ($1000) - Not enough money.//<br> <</if>> <</if>> <<if $has_camera is false>> <<if $money >= 500>> <<link "Buy a Professional 4K Camera ($500)">> <<set $money -= 500>> <<set $has_camera to true>> <<goto "Mall_Electronics">> <</link>><br> <<else>> //Professional 4K Camera ($500) - Not enough money.//<br> <</if>> <</if>> /* ======================================================= */ /* NOUVEAU : MATÉRIEL DE STREAMING POUR LES FILLES */ /* ======================================================= */ <<if $empire_properties.hangar.owned is true>> <br> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00aaff; margin-bottom: 10px;"> <strong>Streamer Equipment Setup ($800 per employee)</strong><br> <span style="color: #888;"><em>Includes dual-monitors, high-end mic, ring light, and capture card.</em></span><br><br> <<set _gearAvailable to false>> <<for _i to 0; _i < $network_girls.length; _i++>> <<set _girl to $network_girls[_i]>> /* On ne propose le matériel que si elle ne l'a pas encore */ <<if _girl.has_streaming_gear is false and _girl.location is "hideout">> <<set _gearAvailable to true>> <<capture _i, _girl>> <<if $money >= 800>> <<link "Setup Streaming Rig for _girl.name ($800)">> <<set $money -= 800>> <<set $network_girls[_i].has_streaming_gear to true>> <<goto "Mall_Electronics">> <</link>><br> <<else>> <span style="color: #ff4444;">// Setup Streaming Rig for _girl.name ($800) - Not enough money. //</span><br> <</if>> <</capture>> <</if>> <</for>> <<if _gearAvailable is false>> <span style="color: #00ffaa;"><em>All your current employees are already equipped with a streaming rig.</em></span><br> <</if>> </div> <</if>> /* --- CONDITION DE FIN AJUSTÉE --- */ <<set _allGirlsEquipped to true>> <<for _j to 0; _j < $network_girls.length; _j++>> <<if $network_girls[_j].has_streaming_gear is false>><<set _allGirlsEquipped to false>><</if>> <</for>> <<if $has_phone is true and $has_computer is true and $has_camera is true and ($empire_properties.hangar.owned is false or _allGirlsEquipped is true)>> <br><em>You have purchased all the premium items available in this store for now.</em><br> <</if>> <br>---<br> <</nobr>> <<link "Back to Mall Directory">><<goto "Financial_Mall">><</link>>
<style> .gym-wrap { max-width: 760px; margin: 10px auto; background: linear-gradient(165deg, #10141d 0%, #090b10 100%); border: 1px solid #26334d; border-radius: 12px; padding: 20px; box-shadow: 0 8px 28px rgba(0, 0, 0, 0.85); font-family: 'Segoe UI', Tahoma, sans-serif; } .gym-header-bar { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #222e42; padding-bottom: 12px; margin-bottom: 16px; flex-wrap: wrap; gap: 10px; } .gym-section-card { background: #141924; border: 1px solid #28344a; border-left: 4px solid #00e5ff; border-radius: 8px; padding: 16px; margin-bottom: 16px; } .gym-tier-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; margin-top: 10px; } .gym-tier-pip { background: #0b0e15; border: 1px solid #253047; border-radius: 6px; padding: 6px 4px; text-align: center; font-size: 0.73em; line-height: 1.25; } .gym-future-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 14px; margin-top: 12px; } .gym-zone-card { background: #131823; border: 1px solid #2b3852; border-radius: 8px; padding: 15px; } .gym-gauge-track { position: relative; width: 100%; height: 28px; background: #0b0e14; border: 2px solid #354560; border-radius: 14px; overflow: hidden; margin: 14px 0; } .gym-action-btn { padding: 9px 16px; font-size: 0.92em; font-weight: 700; border-radius: 6px; cursor: pointer; border: 1px solid #3a4f70; background: #1b2436; color: #e4f0ff; transition: all 0.15s ease; } .gym-action-btn:hover { background: #283752; border-color: #00e5ff; } </style> <<nobr>> <<if $gym_mode is undefined>><<set $gym_mode to "hub">><</if>> <<if $last_coach_day is undefined>><<set $last_coach_day to -1>><</if>> <<if $last_yoga_day is undefined>><<set $last_yoga_day to -1>><</if>> <<if $traits.gym_4 is undefined>><<set $traits.gym_4 to false>><</if>> <<if $traits.gym_5 is undefined>><<set $traits.gym_5 to false>><</if>> /* --- CALCUL DE LA PROGRESSION DES 5 NIVEAUX DE PERK GYM & SOUS-PALIERS --- */ <<set _gCount to ($counters.gym_workouts || 0)>> <<set _curDay to Math.floor($time / 1440)>> /* Détermination du grade actuel et du salaire de coach */ <<if $traits.gym_5 is true>> <<set _gymRankName to "Apex Titan (Lv.5)">> <<set _coachBasePay to 600>> <<elseif $traits.gym_4 is true>> <<set _gymRankName to "Olympian (Lv.4)">> <<set _coachBasePay to 460>> <<elseif $traits.bodybuilder is true>> <<set _gymRankName to "Bodybuilder (Lv.3)">> <<set _coachBasePay to 350>> <<elseif $traits.ripped is true>> <<set _gymRankName to "Ripped Athlete (Lv.2)">> <<set _coachBasePay to 260>> <<elseif $traits.jacked is true or _gCount >= 20>> <<set _gymRankName to "Jacked Lifter (Lv.1)">> <<set _coachBasePay to 180>> <<else>> <<set _gymRankName to "Untrained Novice (Lv.0)">> <<set _coachBasePay to 120>> <</if>> <<set _coachTotalPay to _coachBasePay + ($charisma * 25)>> /* Calcul de la barre de progression par palier (Lv.1=20, Lv.2=40, Lv.3=60, Lv.4=85, Lv.5=115) */ <<set _pendingSleepUnlock to "">> <<if _gCount >= 20 and $traits.jacked is false>> <<set _pendingSleepUnlock to "Jacked (Lv.1)">> <<elseif _gCount >= 40 and $traits.ripped is false>> <<set _pendingSleepUnlock to "Ripped (Lv.2)">> <<elseif _gCount >= 60 and $traits.bodybuilder is false>> <<set _pendingSleepUnlock to "Bodybuilder (Lv.3)">> <<elseif _gCount >= 85 and $traits.gym_4 is false>> <<set _pendingSleepUnlock to "Olympian (Lv.4)">> <<elseif _gCount >= 115 and $traits.gym_5 is false>> <<set _pendingSleepUnlock to "Apex Titan (Lv.5)">> <</if>> <<if _gCount < 20>> <<set _nextGymPerk to "Lv.1 Jacked (+1 STR)">> <<set _tierMin to 0>> <<set _gymTarget to 20>> <<elseif _gCount < 40>> <<set _nextGymPerk to "Lv.2 Ripped (+1 STR, +1 CHA)">> <<set _tierMin to 20>> <<set _gymTarget to 40>> <<elseif _gCount < 60>> <<set _nextGymPerk to "Lv.3 Bodybuilder (+1 STR, +10 Max HP)">> <<set _tierMin to 40>> <<set _gymTarget to 60>> <<elseif _gCount < 85>> <<set _nextGymPerk to "Lv.4 Olympian (+1 STR, +15 STA, +10 HP)">> <<set _tierMin to 60>> <<set _gymTarget to 85>> <<elseif _gCount < 115>> <<set _nextGymPerk to "Lv.5 Apex Titan (+1 STR, +1 CHA, +15 STA, +15 HP)">> <<set _tierMin to 85>> <<set _gymTarget to 115>> <<else>> <<set _nextGymPerk to "Lv.5 Apex Titan (MAX PHYSIQUE REACHED)">> <<set _tierMin to 85>> <<set _gymTarget to 115>> <</if>> <<set _gymPct to Math.clamp(Math.floor(((_gCount - _tierMin) / (_gymTarget - _tierMin)) * 100), 0, 100)>> <<set _nextSubMilestone to (Math.floor(_gCount / 5) + 1) * 5>> <div class="gym-wrap"> <div class="gym-header-bar"> <div> <h3 style="margin: 0; color: #00e5ff; text-transform: uppercase; letter-spacing: 1px;">🏋️♂️ Neon Fitness & Performance Club</h3> <span style="font-size: 0.83em; color: #8fa3bf;">Panoramic glass views, chrome racks, personal coaching, and VIP recovery studios.</span> </div> <div style="text-align: right; font-size: 0.85em;"> <strong>Wallet:</strong> <span style="color: #00ffaa;">$<<print $money>></span> | <strong>HP:</strong> <span style="color: #ff5555;"><<print $hp>>/<<print $maxhp>></span> | <strong>Stamina:</strong> <span style="color: #ffaa00;"><<print $stamina>>/<<print $maxstamina>></span> </div> </div> /* IMAGE D'AMBIANCE OU IMAGE D'ENTRAÎNEMENT SI SÉANCE TERMINÉE */ <<if $gym_log isnot "" and $gym_mode is "hub">> <<set $gym_workout_done to false>> <div style="text-align: center; margin-bottom: 14px;"> <<randomImage "images/Sex/gym/training girl/" 78 0 "#00e5ff">> <div style="font-size: 0.88em; color: #b0c4de; margin-top: 6px;"> <em>You catch your breath across the gym floor, admiring the view between sets.</em> </div> </div> <div style="background: rgba(0, 229, 255, 0.08); border-left: 4px solid #00e5ff; padding: 12px 16px; border-radius: 6px; margin-bottom: 16px; color: #e2f1ff;"> $gym_log </div> <<elseif $gym_mode is "hub">> <div style="border: 2px solid #26334d; padding: 5px; text-align: center; margin-bottom: 16px; background-color: #0b0e14; border-radius: 8px;"> <img src="images/Sex/gym/gym3.jpg" style="max-width: 100%; max-height: 260px; height: auto; border-radius: 5px;"> </div> <</if>> /* BARRE DE PROGRESSION DU PERK PHYSIQUE (5 NIVEAUX + SOUS-PALIERS) */ <div style="background: #0d1118; border: 1px solid #222d40; border-radius: 8px; padding: 12px 14px; margin-bottom: 16px;"> <div style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 0.83em; color: #a3b8d4; margin-bottom: 6px;"> <span>💪 <strong>Current Rank:</strong> <span style="color: #00e5ff;"><<print _gymRankName>></span> | <strong>Next Tier:</strong> <span style="color: #00ffaa;"><<print _nextGymPerk>></span></span> <span><strong><<print _gCount>> / <<print _gymTarget>></strong> Workouts (<<print _gymPct>>%)</span> </div> <div style="background: #07090d; border: 1px solid #2b3952; height: 10px; width: 100%; border-radius: 5px; overflow: hidden; margin-bottom: 6px;"> <div @style="'background: linear-gradient(90deg, #00e5ff, #00ffaa); height: 100%; width: ' + _gymPct + '%;'"></div> </div> <div style="display: flex; justify-content: space-between; font-size: 0.76em; color: #7f94b0;"> <span>🔹 Next Conditioning Sub-Milestone: <strong><<print (_gCount < 115 ? _nextSubMilestone + " Workouts" : "All Milestones Completed")>></strong></span> <<if _pendingSleepUnlock isnot "">> <span style="color: #ffd700; font-weight: bold;">⚡ <<print _pendingSleepUnlock>> ready to unlock when you sleep tonight!</span> <<else>> <span>Total Sessions Logged: <strong><<print _gCount>></strong></span> <</if>> </div> /* GRILLE DES 5 NIVEAUX DE PERK GYM */ <div class="gym-tier-grid"> <div class="gym-tier-pip" @style="($traits.jacked ? 'border-color:#00ffaa; background:rgba(0,255,170,0.08);' : (_gCount >= 20 ? 'border-color:#ffd700;' : 'border-color:#00e5ff;'))"> <strong style="color:#fff;">Lv.1 Jacked</strong><br> <span style="color:#aaa;">20 Workouts</span><br> <<if $traits.jacked>><span style="color:#00ffaa;">✔ Unlocked</span><<elseif _gCount >= 20>><span style="color:#ffd700;">⚡ Sleep</span><<else>><span style="color:#00e5ff;">+1 STR</span><</if>> </div> <div class="gym-tier-pip" @style="($traits.ripped ? 'border-color:#00ffaa; background:rgba(0,255,170,0.08);' : (_gCount >= 40 ? 'border-color:#ffd700;' : (_gCount >= 20 ? 'border-color:#00e5ff;' : '')))"> <strong style="color:#fff;">Lv.2 Ripped</strong><br> <span style="color:#aaa;">40 Workouts</span><br> <<if $traits.ripped>><span style="color:#00ffaa;">✔ Unlocked</span><<elseif _gCount >= 40>><span style="color:#ffd700;">⚡ Sleep</span><<else>><span style="color:#8fa3bf;">+1 STR/CHA</span><</if>> </div> <div class="gym-tier-pip" @style="($traits.bodybuilder ? 'border-color:#00ffaa; background:rgba(0,255,170,0.08);' : (_gCount >= 60 ? 'border-color:#ffd700;' : (_gCount >= 40 ? 'border-color:#00e5ff;' : '')))"> <strong style="color:#fff;">Lv.3 Bodybuilder</strong><br> <span style="color:#aaa;">60 Workouts</span><br> <<if $traits.bodybuilder>><span style="color:#00ffaa;">✔ Unlocked</span><<elseif _gCount >= 60>><span style="color:#ffd700;">⚡ Sleep</span><<else>><span style="color:#8fa3bf;">+1 STR/+10 HP</span><</if>> </div> <div class="gym-tier-pip" @style="($traits.gym_4 ? 'border-color:#00ffaa; background:rgba(0,255,170,0.08);' : (_gCount >= 85 ? 'border-color:#ffd700;' : (_gCount >= 60 ? 'border-color:#00e5ff;' : '')))"> <strong style="color:#fff;">Lv.4 Olympian</strong><br> <span style="color:#aaa;">85 Workouts</span><br> <<if $traits.gym_4>><span style="color:#00ffaa;">✔ Unlocked</span><<elseif _gCount >= 85>><span style="color:#ffd700;">⚡ Sleep</span><<else>><span style="color:#8fa3bf;">+1 STR/+15 STA</span><</if>> </div> <div class="gym-tier-pip" @style="($traits.gym_5 ? 'border-color:#ffd700; background:rgba(255,215,0,0.12);' : (_gCount >= 115 ? 'border-color:#ffd700;' : (_gCount >= 85 ? 'border-color:#00e5ff;' : '')))"> <strong style="color:#ffd700;">Lv.5 Apex Titan</strong><br> <span style="color:#aaa;">115 Workouts</span><br> <<if $traits.gym_5>><span style="color:#ffd700;">👑 MAXED</span><<elseif _gCount >= 115>><span style="color:#ffd700;">⚡ Sleep</span><<else>><span style="color:#8fa3bf;">+1 STR/CHA/STA</span><</if>> </div> </div> </div> /* ========================================================= */ /* CAS 1 : PAS ENCORE MEMBRE */ /* ========================================================= */ <<if $has_gym_membership is false>> <div class="gym-section-card" style="border-left-color: #ffaa00;"> <h4 style="margin: 0 0 8px 0; color: #ffaa00;">💳 Reception Desk — Exclusive Membership Required</h4> <p style="margin: 0 0 12px 0; color: #ccc; font-size: 0.92em;"> A receptionist in form-fitting athletic wear greets you with a bright, professional smile. <em>"Welcome to Neon Fitness. To access our weight room, studio classes, and coaching opportunities, you'll need a lifetime black-card membership."</em> </p> <<if $money >= 500>> <<link "[ 💳 Purchase Lifetime Black-Card Membership ($500) ]">> <<set $money -= 500>> <<set $has_gym_membership to true>> <<set $gym_log to "You hand over the cash. The receptionist slides a sleek, black metallic membership card across the counter. <em>'Welcome to Neon Fitness, sir. Enjoy your workout.'</em>">> <<goto "Mall_Gym">> <</link>> <<else>> <span style="color: #888;"><em>[ Lifetime Membership ($500) — Not enough cash ]</em></span> <</if>> </div> /* ========================================================= */ /* CAS 2 : MINI-JEU 1 — ALTÉROPHILIE ("IRON OVERLOAD") */ /* ========================================================= */ <<elseif $gym_mode is "minigame">> <div class="gym-section-card" style="border-left-color: #00ffaa;"> <h4 style="margin: 0 0 6px 0; color: #00ffaa;">🏋️♂️ Heavy Compound Set — Peak Contraction Challenge</h4> <p style="margin: 0 0 10px 0; color: #bbb; font-size: 0.88em;"> Lock in <strong>5 Heavy Reps</strong> when the power indicator hits the <strong style="color:#00ffaa;">GREEN SWEET SPOT</strong> (or yellow power zone). Land <strong>4+ Clean Reps</strong> for an <strong>Overload Pump (+2 Workout Progress & +25 XP)</strong>! </p> <div style="display: flex; justify-content: space-between; font-size: 0.9em; margin-bottom: 6px;"> <span>Rep: <strong id="gym-rep-num" style="color: #00e5ff;">1</strong> / 5</span> <span>Clean Reps Landed: <strong id="gym-clean-hits" style="color: #00ffaa;">0</strong></span> </div> <div class="gym-gauge-track"> <div style="position: absolute; left: 28%; width: 44%; top: 0; bottom: 0; background: rgba(255, 170, 0, 0.28); border-left: 1px dashed #ffaa00; border-right: 1px dashed #ffaa00;"></div> <div style="position: absolute; left: 42%; width: 16%; top: 0; bottom: 0; background: rgba(0, 255, 170, 0.45); border-left: 2px solid #00ffaa; border-right: 2px solid #00ffaa;"></div> <div id="gym-cursor" style="position: absolute; left: 0%; top: 0; bottom: 0; width: 10px; background: #ffffff; box-shadow: 0 0 10px #fff; border-radius: 4px;"></div> </div> <div id="gym-rep-feedback" style="text-align: center; min-height: 24px; font-weight: bold; font-size: 0.92em; color: #ffaa00; margin-bottom: 10px;"> Time your press when the bar enters the center zone! </div> <div style="text-align: center;"> <button id="gym-lift-btn" type="button" style="padding: 10px 26px; font-size: 1em; font-weight: 800; background: linear-gradient(180deg, #00e5ff, #0088cc); color: #081018; border: none; border-radius: 6px; cursor: pointer;"> 💥 LOCK IN REP! </button> </div> <div id="gym-finish-Perfect" style="display: none; text-align: center; margin-top: 12px;"> <<link "🔥 Claim Overload Pump (+2 Workout Progress, +25 XP)">> <<set $gym_mode to "hub">> <<set _oldTime to $time>> <<set $stamina -= 30>> <<set $time += 60>> <<set $counters.gym_workouts += 2>> <<set $last_gym_time to $time>> <<addXP 25>> <<set $gym_log to "<strong>🔥 OVERLOAD PUMP ACHIEVED!</strong> You crushed all 5 heavy reps with textbook form and explosive power. Everyone on the gym floor noticed your set (<strong>+2 Gym Workout Progress</strong>, <strong>+25 XP</strong>).">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> </div> <div id="gym-finish-Standard" style="display: none; text-align: center; margin-top: 12px;"> <<link "💪 Complete Workout Set (+1 Workout Progress, +10 XP)">> <<set $gym_mode to "hub">> <<set _oldTime to $time>> <<set $stamina -= 30>> <<set $time += 60>> <<set $counters.gym_workouts += 1>> <<set $last_gym_time to $time>> <<addXP 10>> <<set $gym_log to "<strong>Solid Workout Complete:</strong> You pushed through the heavy compound set, feeling a deep burn across your muscle fibers (<strong>+1 Gym Workout Progress</strong>, <strong>+10 XP</strong>).">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> </div> </div> <<done>> <<script>> let pos = 5, dir = 1, speed = 2.1, rep = 1, cleanHits = 0, finished = false, animId; const cursorEl = document.getElementById("gym-cursor"); const repEl = document.getElementById("gym-rep-num"); const hitsEl = document.getElementById("gym-clean-hits"); const fbEl = document.getElementById("gym-rep-feedback"); const liftBtn = document.getElementById("gym-lift-btn"); function tickBar() { if (finished || !cursorEl) return; pos += dir * speed; if (pos >= 96) { pos = 96; dir = -1; } if (pos <= 0) { pos = 0; dir = 1; } cursorEl.style.left = pos + "%"; animId = requestAnimationFrame(tickBar); } if (liftBtn) { liftBtn.onclick = function() { if (finished) return; if (pos >= 42 && pos <= 58) { cleanHits++; fbEl.innerHTML = "<span style='color:#00ffaa;'>⚡ PERFECT CONTRACTION! (Rep " + rep + "/5)</span>"; } else if (pos >= 28 && pos <= 72) { cleanHits++; fbEl.innerHTML = "<span style='color:#ffaa00;'>✔ Clean Rep! (Rep " + rep + "/5)</span>"; } else { fbEl.innerHTML = "<span style='color:#ff5555;'>✖ Form slipped! Missed the power zone (Rep " + rep + "/5)</span>"; } hitsEl.textContent = cleanHits; rep++; speed += 0.35; if (rep > 5) { finished = true; cancelAnimationFrame(animId); liftBtn.style.display = "none"; if (cleanHits >= 4) { document.getElementById("gym-finish-Perfect").style.display = "block"; } else { document.getElementById("gym-finish-Standard").style.display = "block"; } } else { repEl.textContent = rep; } }; } $(document).on(':passageend.gymmg', function() { cancelAnimationFrame(animId); $(document).off('.gymmg'); }); tickBar(); <</script>> <</done>> /* ========================================================= */ /* CAS 3 : MINI-JEU 2 — COACH SPORTIF ("SPOTTER'S REFLEX") */ /* ========================================================= */ <<elseif $gym_mode is "minigame_coach">> <div class="gym-section-card" style="border-left-color: #ffd700;"> <h4 style="margin: 0 0 6px 0; color: #ffd700;">📋 1-on-1 VIP Client Spotting — Hands-On Form Correction</h4> <p style="margin: 0 0 10px 0; color: #bbb; font-size: 0.88em;"> Watch your client's form across <strong>4 Heavy Exercises</strong>. Before her stability gauge collapses to 0%, click the matching <strong>Hands-On Spotter Adjustment</strong>! Score <strong>3+ Perfect Spots</strong> for a <strong>+$150 VIP Tip & Private Locker Room Bonus Scene</strong>! </p> <div style="text-align: center; margin-bottom: 10px;"> <img id="coach-client-img" src="images/Sex/gym/training girl/12.gif" style="max-height: 230px; border-radius: 8px; border: 2px solid #ffd700;"> </div> <div style="display: flex; justify-content: space-between; font-size: 0.9em; margin-bottom: 4px;"> <span>Exercise: <strong id="coach-ex-name" style="color: #ffd700;">1/4 — Heavy Barbell Back Squat</strong></span> <span>Perfect Spots: <strong id="coach-score" style="color: #00ffaa;">0</strong> / 4</span> </div> <div class="gym-gauge-track" style="height: 20px; margin: 8px 0;"> <div id="coach-stab-bar" style="height: 100%; width: 100%; background: linear-gradient(90deg, #ff4444, #ffaa00, #00ffaa); transition: width 0.05s linear;"></div> </div> <div id="coach-cue-box" style="background: #1a1420; border: 1px solid #ffaa00; border-radius: 6px; padding: 10px; text-align: center; font-weight: bold; color: #ffd700; margin-bottom: 12px;"> Get ready to spot her first set... </div> <div id="coach-btn-row" style="display: flex; justify-content: center; gap: 10px; flex-wrap: wrap;"> <button type="button" class="gym-action-btn" data-spot="hips">🦵 Hands on Hips & Knees</button> <button type="button" class="gym-action-btn" data-spot="bar">🏋️♂️ Grip & Stabilize Barbell</button> <button type="button" class="gym-action-btn" data-spot="core">✋ Brace Waist & Lower Back</button> </div> <div id="coach-finish-perfect" style="display: none; text-align: center; margin-top: 14px; background: rgba(255,215,0,0.08); border: 1px solid #ffd700; border-radius: 8px; padding: 12px;"> <div style="color: #00ffaa; font-weight: bold; margin-bottom: 8px;"> 🔥 FLAWLESS HANDS-ON COACHING! Your client is flushed, breathless, and biting her lip from your firm touch. </div> <<link "🔥 Follow Her into the Private Stretching Room (+Paycheck, +$150 Tip, -4% Heat, Bonus Scene!)">> <<set _pay to _coachTotalPay + 150>> <<set $money += _pay>> <<set $heat to Math.max(0, $heat - 4)>> <<set $stamina -= 25>> <<set $time += 120>> <<set $last_coach_day to _curDay>> <<set $counters.gym_workouts += 1>> <<addXP 30>> <<set $gym_scene_stage to "bj">> <<set $gym_mode to "coach_scene">> <<set $gym_log to "You earned <strong>$" + _pay + "</strong> (including a $150 VIP tip) and scrubbed <strong>-4% Police Heat</strong> from your legitimate coaching shift.">> <<goto "Mall_Gym">> <</link>> <br><br> <<link "💵 Keep It Professional & Collect VIP Paycheck (+Paycheck, +$150 Tip, -4% Heat, +30 XP)">> <<set _pay to _coachTotalPay + 150>> <<set _oldTime to $time>> <<set $money += _pay>> <<set $heat to Math.max(0, $heat - 4)>> <<set $stamina -= 25>> <<set $time += 120>> <<set $last_coach_day to _curDay>> <<set $counters.gym_workouts += 1>> <<addXP 30>> <<set $gym_mode to "hub">> <<set $gym_log to "<strong>📋 Elite Coaching Shift Complete:</strong> Your VIP client was thrilled with your hands-on spotting. You earned <strong>$" + _pay + "</strong> in clean cash, scrubbed <strong>-4% Heat</strong>, and gained <strong>+1 Gym Workout Progress & +30 XP</strong>.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> </div> <div id="coach-finish-standard" style="display: none; text-align: center; margin-top: 14px;"> <<link "💵 Finish Coaching Shift & Collect Base Pay (+Paycheck, -3% Heat, +15 XP)">> <<set _oldTime to $time>> <<set $money += _coachTotalPay>> <<set $heat to Math.max(0, $heat - 3)>> <<set $stamina -= 25>> <<set $time += 120>> <<set $last_coach_day to _curDay>> <<set $counters.gym_workouts += 1>> <<addXP 15>> <<set $gym_mode to "hub">> <<set $gym_log to "<strong>📋 Coaching Shift Complete:</strong> You guided your clients through their routines and collected <strong>$" + _coachTotalPay + "</strong> in legitimate trainer fees (<strong>-3% Heat, +1 Workout Progress, +15 XP</strong>).">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> </div> </div> <<done>> <<script>> const b1 = ['images/Sex/gym/training girl/0.gif', 'images/Sex/gym/training girl/1.gif', 'images/Sex/gym/training girl/10.webp', 'images/Sex/gym/training girl/11.gif', 'images/Sex/gym/training girl/11.webp', 'images/Sex/gym/training girl/12.gif', 'images/Sex/gym/training girl/13.webp', 'images/Sex/gym/training girl/14.gif', 'images/Sex/gym/training girl/15.webp', 'images/Sex/gym/training girl/16.gif', 'images/Sex/gym/training girl/17.webp', 'images/Sex/gym/training girl/18.gif', 'images/Sex/gym/training girl/19.webp', 'images/Sex/gym/training girl/2.webp', 'images/Sex/gym/training girl/3.gif', 'images/Sex/gym/training girl/4.webp', 'images/Sex/gym/training girl/5.gif', 'images/Sex/gym/training girl/6.webp', 'images/Sex/gym/training girl/7.gif', 'images/Sex/gym/training girl/8.webp', 'images/Sex/gym/training girl/9.gif']; const b2 = ['images/Sex/gym/training girl/20.webp', 'images/Sex/gym/training girl/21.webp', 'images/Sex/gym/training girl/22.webp', 'images/Sex/gym/training girl/23.webp', 'images/Sex/gym/training girl/25.webp', 'images/Sex/gym/training girl/26.webp', 'images/Sex/gym/training girl/27.webp', 'images/Sex/gym/training girl/28.webp', 'images/Sex/gym/training girl/30.webp', 'images/Sex/gym/training girl/31.gif', 'images/Sex/gym/training girl/32.gif', 'images/Sex/gym/training girl/33.gif', 'images/Sex/gym/training girl/34.gif', 'images/Sex/gym/training girl/35.gif', 'images/Sex/gym/training girl/36.webp', 'images/Sex/gym/training girl/37.webp', 'images/Sex/gym/training girl/38.webp', 'images/Sex/gym/training girl/39.webp']; const b3 = ['images/Sex/gym/training girl/40.webp', 'images/Sex/gym/training girl/42.webp', 'images/Sex/gym/training girl/43.webp', 'images/Sex/gym/training girl/44.webp', 'images/Sex/gym/training girl/45.webp', 'images/Sex/gym/training girl/46.webp', 'images/Sex/gym/training girl/47.webp', 'images/Sex/gym/training girl/48.webp', 'images/Sex/gym/training girl/49.webp', 'images/Sex/gym/training girl/50.webp', 'images/Sex/gym/training girl/51.webp', 'images/Sex/gym/training girl/52.webp', 'images/Sex/gym/training girl/53.webp', 'images/Sex/gym/training girl/54.webp', 'images/Sex/gym/training girl/55.webp', 'images/Sex/gym/training girl/56.webp', 'images/Sex/gym/training girl/57.webp', 'images/Sex/gym/training girl/58.webp', 'images/Sex/gym/training girl/59.webp']; const b4 = ['images/Sex/gym/training girl/60.webp', 'images/Sex/gym/training girl/61.webp', 'images/Sex/gym/training girl/62.webp', 'images/Sex/gym/training girl/63.webp', 'images/Sex/gym/training girl/64.webp', 'images/Sex/gym/training girl/65.webp', 'images/Sex/gym/training girl/66.webp', 'images/Sex/gym/training girl/67.webp', 'images/Sex/gym/training girl/68.webp', 'images/Sex/gym/training girl/69.webp', 'images/Sex/gym/training girl/70.webp', 'images/Sex/gym/training girl/71.webp', 'images/Sex/gym/training girl/72.webp', 'images/Sex/gym/training girl/73.webp', 'images/Sex/gym/training girl/74.webp', 'images/Sex/gym/training girl/75.webp', 'images/Sex/gym/training girl/76.webp', 'images/Sex/gym/training girl/77.webp', 'images/Sex/gym/training girl/78.webp']; const exercises = [ { title: "1/4 — Heavy Barbell Back Squat", img: b1[Math.floor(Math.random() * b1.length)] }, { title: "2/4 — Loaded Glute Hip Thrust", img: b2[Math.floor(Math.random() * b2.length)] }, { title: "3/4 — Incline Barbell Press", img: b3[Math.floor(Math.random() * b3.length)] }, { title: "4/4 — Romanian Stiff-Leg Deadlift", img: b4[Math.floor(Math.random() * b4.length)] } ]; const cues = [ { type: "hips", text: "⚠️ Her knees and hips are wobbling inward! Grab her hips & knees!" }, { type: "bar", text: "⚠️ The heavy barbell is tilting dangerously to the left! Stabilize the bar!" }, { type: "core", text: "⚠️ Her lower back is arching under the weight! Brace her waist & core!" } ]; let round = 0, score = 0, stab = 100, activeCue = null, ended = false, timerId; const imgEl = document.getElementById("coach-client-img"); const exEl = document.getElementById("coach-ex-name"); const scoreEl = document.getElementById("coach-score"); const barEl = document.getElementById("coach-stab-bar"); const cueEl = document.getElementById("coach-cue-box"); const btnRow = document.getElementById("coach-btn-row"); function startRound() { if (round >= 4) { ended = true; cancelAnimationFrame(timerId); btnRow.style.display = "none"; if (score >= 3) { document.getElementById("coach-finish-perfect").style.display = "block"; } else { document.getElementById("coach-finish-standard").style.display = "block"; } return; } stab = 100; exEl.textContent = exercises[round].title; imgEl.src = exercises[round].img; activeCue = cues[Math.floor(Math.random() * cues.length)]; cueEl.innerHTML = activeCue.text; } function tickCoach() { if (ended || !barEl) return; stab -= (0.48 + round * 0.08); if (stab <= 0) { stab = 0; cueEl.innerHTML = "<span style='color:#ff5555;'>✖ Too slow! She had to rack the weight early!</span>"; round++; startRound(); } barEl.style.width = Math.max(0, stab) + "%"; if (!ended) timerId = requestAnimationFrame(tickCoach); } if (btnRow) { btnRow.querySelectorAll("button").forEach(function(btn) { btn.onclick = function() { if (ended || !activeCue) return; const pick = btn.getAttribute("data-spot"); if (pick === activeCue.type) { score++; scoreEl.textContent = score; cueEl.innerHTML = "<span style='color:#00ffaa;'>✔ PERFECT HANDS-ON SPOT! You pressed tightly against her and locked her form!</span>"; } else { cueEl.innerHTML = "<span style='color:#ff5555;'>✖ Wrong adjustment! Her form slipped on that rep!</span>"; } round++; startRound(); }; }); } $(document).on(':passageend.coachmg', function() { cancelAnimationFrame(timerId); $(document).off('.coachmg'); }); startRound(); tickCoach(); <</script>> <</done>> /* ========================================================= */ /* CAS 4 : SCÈNE PRIVÉE COACH VIP ("coach_scene") */ /* ========================================================= */ <<elseif $gym_mode is "coach_scene">> <<if $gym_scene_stage is undefined>><<set $gym_scene_stage to "bj">><</if>> <div class="gym-section-card" style="border-left-color: #ff66b2;"> <h4 style="margin: 0 0 8px 0; color: #ff66b2;">🔥 Private VIP Stretching Suite — Post-Workout Reward</h4> <p style="margin: 0 0 12px 0; color: #ccc; font-size: 0.9em;"> Your VIP client locks the door to the private recovery suite, peeling off her damp sports bra with a breathless smirk. <em>"Having your hands all over my hips on the squat rack got me way too worked up, Coach... Help me burn off the rest of this tension."</em> </p> <div style="text-align: center; background: #090c12; border: 2px solid #ff66b2; border-radius: 8px; padding: 10px; margin-bottom: 12px;"> <<if $gym_scene_stage is "bj">> <<set _bjPool to ['images/Sex/gym/bj/0.gif', 'images/Sex/gym/bj/1.gif', 'images/Sex/gym/bj/10.gif', 'images/Sex/gym/bj/11.webm', 'images/Sex/gym/bj/12.webm', 'images/Sex/gym/bj/2.gif', 'images/Sex/gym/bj/3.gif', 'images/Sex/gym/bj/4.webp', 'images/Sex/gym/bj/5.webp', 'images/Sex/gym/bj/6.webp', 'images/Sex/gym/bj/7.webp', 'images/Sex/gym/bj/8.webp', 'images/Sex/gym/bj/9.gif']>> <<set _curMedia to _bjPool.random()>> <<if _curMedia.endsWith('.webm') or _curMedia.endsWith('.mp4')>> <video @src="_curMedia" autoplay loop muted playsinline style="max-width: 100%; max-height: 360px; border-radius: 6px;"></video> <<else>> <img @src="_curMedia" style="max-width: 100%; max-height: 360px; border-radius: 6px;"> <</if>> <div style="color: #ffb3d9; font-size: 0.88em; margin-top: 8px;"> <em>She drops onto the exercise mat in front of you, wrapping her lips eagerly around your shaft while looking up at you.</em> </div> <<elseif $gym_scene_stage is "sex">> <<set _sexPool to ['images/Sex/gym/sex/0.gif', 'images/Sex/gym/sex/1.gif', 'images/Sex/gym/sex/10.webm', 'images/Sex/gym/sex/11.webm', 'images/Sex/gym/sex/12.webm', 'images/Sex/gym/sex/13.gif', 'images/Sex/gym/sex/14.webp', 'images/Sex/gym/sex/15.webp', 'images/Sex/gym/sex/16.webp', 'images/Sex/gym/sex/17.webp', 'images/Sex/gym/sex/18.webp', 'images/Sex/gym/sex/19.webp', 'images/Sex/gym/sex/2.gif', 'images/Sex/gym/sex/20.webp', 'images/Sex/gym/sex/21.webp', 'images/Sex/gym/sex/22.webp', 'images/Sex/gym/sex/3.gif', 'images/Sex/gym/sex/4.gif', 'images/Sex/gym/sex/5.gif', 'images/Sex/gym/sex/6.gif', 'images/Sex/gym/sex/7.gif', 'images/Sex/gym/sex/8.gif', 'images/Sex/gym/sex/9.gif']>> <<set _curMedia to _sexPool.random()>> <<if _curMedia.endsWith('.webm') or _curMedia.endsWith('.mp4')>> <video @src="_curMedia" autoplay loop muted playsinline style="max-width: 100%; max-height: 360px; border-radius: 6px;"></video> <<else>> <img @src="_curMedia" style="max-width: 100%; max-height: 360px; border-radius: 6px;"> <</if>> <div style="color: #ffb3d9; font-size: 0.88em; margin-top: 8px;"> <em>You pin her toned legs back against the padded bench, driving deep into her with relentless athletic rhythm.</em> </div> <<elseif $gym_scene_stage is "ride">> <<set _ridePool to ['images/Sex/gym/sex/7.gif', 'images/Sex/gym/sex/8.gif', 'images/Sex/gym/sex/9.gif', 'images/Sex/gym/sex/10.webm', 'images/Sex/gym/sex/14.webp', 'images/Sex/gym/sex/15.webp', 'images/Sex/gym/sex/20.webp', 'images/Sex/gym/sex/21.webp', 'images/Sex/gym/sex/22.webp']>> <<set _curMedia to _ridePool.random()>> <<if _curMedia.endsWith('.webm') or _curMedia.endsWith('.mp4')>> <video @src="_curMedia" autoplay loop muted playsinline style="max-width: 100%; max-height: 360px; border-radius: 6px;"></video> <<else>> <img @src="_curMedia" style="max-width: 100%; max-height: 360px; border-radius: 6px;"> <</if>> <div style="color: #ffb3d9; font-size: 0.88em; margin-top: 8px;"> <em>She straddles your lap on the weight bench, putting her lower-body conditioning to work as she rides you hard.</em> </div> <<elseif $gym_scene_stage is "anal">> <<set _analPool to ['images/Sex/gym/anal/0.gif', 'images/Sex/gym/anal/1.gif', 'images/Sex/gym/anal/2.webp', 'images/Sex/gym/anal/3.webp', 'images/Sex/gym/anal/4.gif', 'images/Sex/gym/anal/5.webp', 'images/Sex/gym/anal/6.webm', 'images/Sex/gym/anal/7.webm', 'images/Sex/gym/anal/8.webm', 'images/Sex/gym/anal/9.webp']>> <<set _curMedia to _analPool.random()>> <<if _curMedia.endsWith('.webm') or _curMedia.endsWith('.mp4')>> <video @src="_curMedia" autoplay loop muted playsinline style="max-width: 100%; max-height: 360px; border-radius: 6px;"></video> <<else>> <img @src="_curMedia" style="max-width: 100%; max-height: 360px; border-radius: 6px;"> <</if>> <div style="color: #ffb3d9; font-size: 0.88em; margin-top: 8px;"> <em>You slick her up with massage oil and press deep into her tight backdoor while she grips the chrome rack, moaning aloud.</em> </div> <</if>> </div> <div style="display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-bottom: 14px;"> <<link "[ 👄 Oral Warmdown ]">><<set $gym_scene_stage to "bj">><<goto "Mall_Gym">><</link>> | <<link "[ 🔥 Bench & Mat Fuck ]">><<set $gym_scene_stage to "sex">><<goto "Mall_Gym">><</link>> | <<link "[ 🏇 Cowgirl Ride ]">><<set $gym_scene_stage to "ride">><<goto "Mall_Gym">><</link>> | <<link "[ 🍑 Deep Backdoor ]">><<set $gym_scene_stage to "anal">><<goto "Mall_Gym">><</link>> </div> <div style="border-top: 1px solid #2b3852; padding-top: 12px; text-align: center;"> <<link "💵 Accept Her Discreet Cash Envelope (+$250 Private Bonus, +15 XP)">> <<set $money += 250>> <<addXP 15>> <<set $gym_mode to "hub">> <<set $gym_log += "<br><span style='color:#ff66b2;'><strong>🔥 Private Suite Bonus:</strong> After an unforgettable private session, your VIP client slipped an extra <strong>$250</strong> into your gym bag (<strong>+15 XP</strong>).</span>">> <<if Math.floor((($time - 120) - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> <<if $network_girls isnot undefined>> <br><br> <<link "💎 Seduce & Recruit Her into Your Empire Roster">> <<set _recruitChance to 15 + ($charisma * 12)>> <<if random(1, 100) <= _recruitChance>> <<set _newModelName to $female_names.random()>> <<run $network_girls.push({ id: random(100000, 999999), name: _newModelName + " (Fitness VIP)", race: ["white", "asian", "black"].random(), discipline: 100, tied: false, clothes_level: 1, surgery_done: false, location: "hideout", has_streaming_gear: false, status: "active", days_in_trouble: 0, base_income: random(95, 145) })>> <<addXP 35>> <<set $gym_mode to "hub">> <<set $gym_log += "<br><span style='color:#ffd700;'><strong>💎 Fitness VIP Recruited:</strong> Completely hooked on your charm, <strong>" + _newModelName + "</strong> agreed to work exclusively for your Empire network! Check your Empire App to assign her.</span>">> <<else>> <<set $money += 100>> <<addXP 10>> <<set $gym_mode to "hub">> <<set $gym_log += "<br><span style='color:#ffaa00;'><strong>✖ Recruitment Pitch Declined:</strong> She loved the private workout, but your pitch didn't quite convince her to join your operation yet. She still slipped <strong>$100</strong> into your gym bag before leaving (<strong>+10 XP</strong>).</span>">> <</if>> <<if Math.floor((($time - 120) - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> <</if>> </div> </div> /* ========================================================= */ /* CAS 5 : MINI-JEU 3 — YOGA FLOW & BREATH ("minigame_yoga") */ /* ========================================================= */ <<elseif $gym_mode is "minigame_yoga">> <div class="gym-section-card" style="border-left-color: #ff66b2;"> <h4 style="margin: 0 0 6px 0; color: #ff66b2;">🧘♀️ Glass Yoga Studio — Harmonic Breath & Flexibility Flow</h4> <p style="margin: 0 0 10px 0; color: #bbb; font-size: 0.88em;"> Synchronize your breathing across <strong>4 Yoga Poses</strong> with the flexible women in the front row. Click <strong>HOLD POSE</strong> when the expanding harmonic bar enters the <strong style="color:#ff66b2;">PINK ZEN ZONE (62%–88%)</strong>! Score <strong>3+ Harmonic Poses</strong> for an <strong>After-Class Yoga & Sauna Encounter</strong>! </p> <div style="text-align: center; margin-bottom: 10px;"> <img src="images/Sex/gym/gym4.jpg" style="max-width: 100%; max-height: 210px; border-radius: 8px; border: 2px solid #ff66b2;"> </div> <div style="display: flex; justify-content: space-between; font-size: 0.9em; margin-bottom: 4px;"> <span>Pose: <strong id="yoga-pose-name" style="color: #ff66b2;">1/4 — Deep Sun Salutation</strong></span> <span>Harmonic Poses: <strong id="yoga-hits" style="color: #00ffaa;">0</strong> / 4</span> </div> <div class="gym-gauge-track"> <!-- Zone Rose Zen (62% à 88%) --> <div style="position: absolute; left: 62%; width: 26%; top: 0; bottom: 0; background: rgba(255, 102, 178, 0.42); border-left: 2px solid #ff66b2; border-right: 2px solid #ff66b2;"></div> <!-- Barre respiratoire --> <div id="yoga-breath-bar" style="height: 100%; width: 10%; background: linear-gradient(90deg, #00e5ff, #ff66b2);"></div> </div> <div id="yoga-feedback" style="text-align: center; min-height: 24px; font-weight: bold; font-size: 0.92em; color: #ffb3d9; margin-bottom: 10px;"> Inhale deeply... Lock the pose inside the Pink Zen Zone! </div> <div style="text-align: center;"> <button id="yoga-hold-btn" type="button" style="padding: 10px 26px; font-size: 1em; font-weight: 800; background: linear-gradient(180deg, #ff66b2, #c2185b); color: #fff; border: none; border-radius: 6px; cursor: pointer;"> 🧘♀️ SYNCHRONIZE & HOLD POSE! </button> </div> <div id="yoga-finish-perfect" style="display: none; text-align: center; margin-top: 12px; background: rgba(255,102,178,0.08); border: 1px solid #ff66b2; border-radius: 8px; padding: 12px;"> <div style="color: #ff66b2; font-weight: bold; margin-bottom: 8px;"> ✨ PERFECT HARMONIC FLOW! The flexible yoga influencer next to your mat invites you to join her for private partner stretching... </div> <<link "🔥 Join Her for Private Partner Stretching & Sauna (+25 HP, +10 Stamina, +1 Workout, Bonus Scene!)">> <<set $hp to Math.min($maxhp, $hp + 25)>> <<set $stamina to Math.min($maxstamina, $stamina + 10)>> <<set $time += 60>> <<set $last_yoga_day to _curDay>> <<set $counters.gym_workouts += 1>> <<addXP 25>> <<set $yoga_scene_stage to "stretch">> <<set $gym_mode to "yoga_scene">> <<set $gym_log to "Your yoga flow restored <strong>+25 HP & +10 Stamina</strong> and granted <strong>+1 Gym Workout Progress</strong>.">> <<goto "Mall_Gym">> <</link>> </div> <div id="yoga-finish-standard" style="display: none; text-align: center; margin-top: 12px;"> <<link "🧘♀️ Complete Recovery Flow (+20 HP, +5 Stamina, +1 Workout Progress, +15 XP)">> <<set _oldTime to $time>> <<set $hp to Math.min($maxhp, $hp + 20)>> <<set $stamina to Math.min($maxstamina, $stamina + 5)>> <<set $time += 60>> <<set $last_yoga_day to _curDay>> <<set $counters.gym_workouts += 1>> <<addXP 15>> <<set $gym_mode to "hub">> <<set $gym_log to "<strong>🧘♀️ Yoga & Mobility Session Complete:</strong> Deep stretching and breathwork eased your joints and restored <strong>+20 HP, +5 Stamina, +1 Gym Workout Progress, and +15 XP</strong>.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> </div> </div> <<done>> <<script>> const poses = [ "1/4 — Deep Sun Salutation", "2/4 — Open Hip Split Stretch", "3/4 — Cobra Spine Arch", "4/4 — Partner Lotus Hold" ]; let breath = 10, bDir = 1, bSpeed = 1.45, poseIdx = 0, hits = 0, yDone = false, yAnim; const barEl = document.getElementById("yoga-breath-bar"); const poseEl = document.getElementById("yoga-pose-name"); const hitsEl = document.getElementById("yoga-hits"); const fbEl = document.getElementById("yoga-feedback"); const holdBtn = document.getElementById("yoga-hold-btn"); function tickYoga() { if (yDone || !barEl) return; breath += bDir * bSpeed; if (breath >= 98) { breath = 98; bDir = -1; } if (breath <= 5) { breath = 5; bDir = 1; } barEl.style.width = breath + "%"; yAnim = requestAnimationFrame(tickYoga); } if (holdBtn) { holdBtn.onclick = function() { if (yDone) return; if (breath >= 62 && breath <= 88) { hits++; hitsEl.textContent = hits; fbEl.innerHTML = "<span style='color:#00ffaa;'>✨ HARMONIC POSE LOCKED! She smiles at your flexibility (" + (poseIdx + 1) + "/4)</span>"; } else { fbEl.innerHTML = "<span style='color:#ffaa00;'>✖ Out of rhythm! Missed the harmonic breath window (" + (poseIdx + 1) + "/4)</span>"; } poseIdx++; bSpeed += 0.3; if (poseIdx >= 4) { yDone = true; cancelAnimationFrame(yAnim); holdBtn.style.display = "none"; if (hits >= 3) { document.getElementById("yoga-finish-perfect").style.display = "block"; } else { document.getElementById("yoga-finish-standard").style.display = "block"; } } else { poseEl.textContent = poses[poseIdx]; } }; } $(document).on(':passageend.yogamg', function() { cancelAnimationFrame(yAnim); $(document).off('.yogamg'); }); tickYoga(); <</script>> <</done>> /* ========================================================= */ /* CAS 6 : SCÈNE YOGA & SAUNA VIP ("yoga_scene") */ /* ========================================================= */ <<elseif $gym_mode is "yoga_scene">> <<if $yoga_scene_stage is undefined>><<set $yoga_scene_stage to "stretch">><</if>> <div class="gym-section-card" style="border-left-color: #ff66b2;"> <h4 style="margin: 0 0 8px 0; color: #ff66b2;">🧘♀️ Private Yoga Mat & VIP Steam Room</h4> <p style="margin: 0 0 12px 0; color: #ccc; font-size: 0.9em;"> After the class clears out, the flexible yoga influencer stays behind on the sunlit mat, arching her back and sliding her yoga pants down over her hips. <em>"Let's see how deep we can really stretch together..."</em> </p> <div style="text-align: center; background: #090c12; border: 2px solid #ff66b2; border-radius: 8px; padding: 10px; margin-bottom: 12px;"> <<if $yoga_scene_stage is "stretch">> <<set _yPool to ['images/Sex/gym/sex/0.gif', 'images/Sex/gym/sex/1.gif', 'images/Sex/gym/sex/10.webm', 'images/Sex/gym/sex/11.webm', 'images/Sex/gym/sex/12.webm', 'images/Sex/gym/sex/13.gif', 'images/Sex/gym/sex/14.webp', 'images/Sex/gym/sex/15.webp', 'images/Sex/gym/sex/16.webp', 'images/Sex/gym/sex/17.webp', 'images/Sex/gym/sex/18.webp', 'images/Sex/gym/sex/19.webp', 'images/Sex/gym/sex/2.gif', 'images/Sex/gym/sex/20.webp', 'images/Sex/gym/sex/21.webp', 'images/Sex/gym/sex/22.webp', 'images/Sex/gym/sex/3.gif', 'images/Sex/gym/sex/4.gif', 'images/Sex/gym/sex/5.gif', 'images/Sex/gym/sex/6.gif', 'images/Sex/gym/sex/7.gif', 'images/Sex/gym/sex/8.gif', 'images/Sex/gym/sex/9.gif']>> <<set _curMedia to _yPool.random()>> <<if _curMedia.endsWith('.webm') or _curMedia.endsWith('.mp4')>> <video @src="_curMedia" autoplay loop muted playsinline style="max-width: 100%; max-height: 360px; border-radius: 6px;"></video> <<else>> <img @src="_curMedia" style="max-width: 100%; max-height: 360px; border-radius: 6px;"> <</if>> <div style="color: #ffb3d9; font-size: 0.88em; margin-top: 8px;"> <em>Her incredible flexibility lets her fold effortlessly into position on the yoga mat as you slide deep inside her.</em> </div> <<elseif $yoga_scene_stage is "oral">> <<set _ybjPool to ['images/Sex/gym/bj/0.gif', 'images/Sex/gym/bj/1.gif', 'images/Sex/gym/bj/10.gif', 'images/Sex/gym/bj/11.webm', 'images/Sex/gym/bj/12.webm', 'images/Sex/gym/bj/2.gif', 'images/Sex/gym/bj/3.gif', 'images/Sex/gym/bj/4.webp', 'images/Sex/gym/bj/5.webp', 'images/Sex/gym/bj/6.webp', 'images/Sex/gym/bj/7.webp', 'images/Sex/gym/bj/8.webp', 'images/Sex/gym/bj/9.gif']>> <<set _curMedia to _ybjPool.random()>> <<if _curMedia.endsWith('.webm') or _curMedia.endsWith('.mp4')>> <video @src="_curMedia" autoplay loop muted playsinline style="max-width: 100%; max-height: 360px; border-radius: 6px;"></video> <<else>> <img @src="_curMedia" style="max-width: 100%; max-height: 360px; border-radius: 6px;"> <</if>> <div style="color: #ffb3d9; font-size: 0.88em; margin-top: 8px;"> <em>She kneels on the padded yoga mat, worshiping your cock with slow, deep rhythmic strokes.</em> </div> <</if>> </div> <div style="display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; margin-bottom: 14px;"> <<link "[ 🧘♀️ Flexible Mat Sex ]">><<set $yoga_scene_stage to "stretch">><<goto "Mall_Gym">><</link>> | <<link "[ 👄 Studio Mat Oral ]">><<set $yoga_scene_stage to "oral">><<goto "Mall_Gym">><</link>> </div> <div style="border-top: 1px solid #2b3852; padding-top: 12px; text-align: center;"> <<link "🥂 Unwind in the VIP Sauna & Accept Her Gift (+$200 Cash, -2% Heat, +15 XP)">> <<set $money += 200>> <<set $heat to Math.max(0, $heat - 2)>> <<addXP 15>> <<set $gym_mode to "hub">> <<set $gym_log += "<br><span style='color:#ff66b2;'><strong>🧘♀️ VIP Studio Encounter:</strong> After stretching her out on the mat, she treated you to the private sauna and left <strong>$200</strong> for a private collab (<strong>-2% Heat, +15 XP</strong>).</span>">> <<if Math.floor((($time - 60) - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> <<if $network_girls isnot undefined>> <br><br> <<link "💎 Recruit the Yoga Influencer into Your Empire Roster">> <<set _yogaRecruitChance to 15 + ($charisma * 12)>> <<if random(1, 100) <= _yogaRecruitChance>> <<set _yogaName to $female_names.random()>> <<run $network_girls.push({ id: random(100000, 999999), name: _yogaName + " (Yoga Influencer)", race: ["white", "asian", "black"].random(), discipline: 100, tied: false, clothes_level: 1, surgery_done: false, location: "hideout", has_streaming_gear: false, status: "active", days_in_trouble: 0, base_income: random(100, 150) })>> <<addXP 35>> <<set $gym_mode to "hub">> <<set $gym_log += "<br><span style='color:#ffd700;'><strong>💎 Yoga Influencer Recruited:</strong> Obsessed with your stamina and smooth talk, <strong>" + _yogaName + "</strong> signed onto your Empire network!</span>">> <<else>> <<set $money += 80>> <<addXP 10>> <<set $gym_mode to "hub">> <<set $gym_log += "<br><span style='color:#ffaa00;'><strong>✖ Recruitment Pitch Declined:</strong> She giggled and kissed your cheek, saying she prefers keeping her brand independent for now—though she still transferred <strong>$80</strong> for the session (<strong>+10 XP</strong>).</span>">> <</if>> <<if Math.floor((($time - 60) - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> <</if>> </div> </div> /* ========================================================= */ /* CAS 7 : HUB PRINCIPAL DU GYM (MEMBRE ACTIF) */ /* ========================================================= */ <<else>> <!-- ZONE 1 : PLATEAU DE MUSCULATION --> <div class="gym-section-card"> <h4 style="margin: 0 0 6px 0; color: #00e5ff;">🏋️♂️ 1. The Iron Floor — Strength & Hypertrophy</h4> <p style="margin: 0 0 12px 0; color: #bbb; font-size: 0.9em;"> Train once per half-day (Morning / Afternoon-Evening). Choose a standard workout or test your timing on the heavy compound rack for <strong>double workout progress (+2)</strong>! </p> <<if Math.floor($time / 720) > Math.floor($last_gym_time / 720)>> <<if $stamina >= 30>> <<link "[ 💪 Quick Workout Session (30 Stamina, 1 hr — +1 Progress, +10 XP) ]">> <<set _oldTime to $time>> <<set $stamina -= 30>> <<set $time += 60>> <<set $counters.gym_workouts += 1>> <<set $last_gym_time to $time>> <<addXP 10>> <<set $gym_log to "You hit the weights hard. You can feel the growth in your muscles, knowing consistency is the key to real strength (<strong>+1 Gym Workout Progress</strong>, <strong>+10 XP</strong>).">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> <br><br> <<link "[ 🔥 Heavy Compound Set — Interactive Minigame (30 Stamina, 1 hr — Up to +2 Progress & +25 XP!) ]">> <<set $gym_mode to "minigame">> <<set $gym_log to "">> <<goto "Mall_Gym">> <</link>> <<else>> <span style="color: #ff4444;"><em>You are too exhausted to work out right now (Requires 30 Stamina).</em></span> <</if>> <<else>> <span style="color: #888;"><em>⏳ Your muscles are still recovering from your last heavy lift. Come back in the next half-day (after 12:00 PM or tomorrow morning) to lift again.</em></span> <</if>> </div> <!-- ZONES 2 & 3 : TRAVAIL DE COACH LÉGITIME & STUDIO YOGA / SAUNA VIP --> <div class="gym-future-grid"> <!-- ZONE 2 : COACH SPORTIF LÉGITIME --> <div class="gym-zone-card" style="border-top: 3px solid #ffd700;"> <h4 style="margin: 0 0 6px 0; color: #ffd700;">📋 2. Personal Trainer & Coaching Desk</h4> <p style="margin: 0 0 8px 0; color: #b0c0d6; font-size: 0.85em;"> Work a legitimate 2-hour coaching shift spotting wealthy clients. Pays clean cash based on your <strong>Gym Level & Charisma</strong>, scrubs <strong>Police Heat</strong>, and unlocks <strong>Private VIP Client Scenes</strong>! </p> <div style="font-size: 0.82em; color: #99a8bf; margin-bottom: 10px; background: #0c1017; padding: 8px; border-radius: 6px;"> <strong>Credential:</strong> <span style="color:#00e5ff;"><<print _gymRankName>></span><br> <strong>Shift Payrate:</strong> <span style="color:#00ffaa;">$<<print _coachTotalPay>></span> <span style="color:#888;">(+$150 VIP Tip on Perfect Spotting)</span> </div> <<if $traits.jacked is false and _gCount < 20>> <span style="color: #ffaa00; font-size: 0.84em;"><em>🔒 Requires <strong>Gym Lv.1 (Jacked — 20 Workouts)</strong> to qualify as a certified Neon Fitness Personal Trainer.</em></span> <<elseif _curDay <= $last_coach_day>> <span style="color: #888; font-size: 0.84em;"><em>✔ You already completed your coaching shift today. Come back tomorrow for new client bookings.</em></span> <<elseif $stamina < 25>> <span style="color: #ff4444; font-size: 0.84em;"><em>Requires 25 Stamina to work a 2-hour coaching shift.</em></span> <<else>> <<link "[ 🎯 1-on-1 VIP Client Spotting — Minigame & Bonus Scene (25 STA, 2 hrs) ]">> <<set $gym_mode to "minigame_coach">> <<set $gym_log to "">> <<goto "Mall_Gym">> <</link>> <br><br> <<link "[ 💵 Quick Floor Coaching Shift (25 STA, 2 hrs — $" + _coachTotalPay + ", -3% Heat, +1 Workout) ]">> <<set _oldTime to $time>> <<set $money += _coachTotalPay>> <<set $heat to Math.max(0, $heat - 3)>> <<set $stamina -= 25>> <<set $time += 120>> <<set $last_coach_day to _curDay>> <<set $counters.gym_workouts += 1>> <<addXP 15>> <<set $gym_log to "<strong>📋 Coaching Shift Complete:</strong> You spotted clients across the weight room, earning <strong>$" + _coachTotalPay + "</strong> in legitimate income, scrubbing <strong>-3% Police Heat</strong>, and gaining <strong>+1 Gym Workout Progress & +15 XP</strong>.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Mall_Gym">> <</if>> <</link>> <</if>> </div> <!-- ZONE 3 : STUDIO YOGA, CARDIO RHYTHM & SAUNA VIP --> <div class="gym-zone-card" style="border-top: 3px solid #ff66b2;"> <h4 style="margin: 0 0 6px 0; color: #ff66b2;">🧘♀️ 3. Yoga Studio & VIP Steam Sauna</h4> <p style="margin: 0 0 8px 0; color: #b0c0d6; font-size: 0.85em;"> Join the glass-walled flexibility & breathwork class with the city's trophy wives and fitness influencers. Restores <strong>HP & Stamina</strong>, adds <strong>+1 Workout Progress</strong>, and unlocks <strong>Private Mat & Sauna Scenes</strong>! </p> <div style="font-size: 0.82em; color: #99a8bf; margin-bottom: 10px; background: #0c1017; padding: 8px; border-radius: 6px;"> <strong>Benefits:</strong> <span style="color:#00ffaa;">+20 to +25 HP, Net Stamina Recovery, +1 Workout Progress</span><br> <strong>Bonus:</strong> <span style="color:#ff66b2;">3+ Harmonic Poses unlocks Influencer Mat Scene & Recruitment</span> </div> <<if _curDay <= $last_yoga_day>> <span style="color: #888; font-size: 0.84em;"><em>✔ You already attended today's Yoga & Sauna session. Classes reset tomorrow morning.</em></span> <<else>> <<link "[ 🧘♀️ Join Yoga Flow & Breath Minigame (1 hr — Restores HP/STA, +1 Workout & Scene) ]">> <<set $gym_mode to "minigame_yoga">> <<set $gym_log to "">> <<goto "Mall_Gym">> <</link>> <</if>> </div> </div> <</if>> <div style="border-top: 1px solid #222e42; margin-top: 16px; padding-top: 14px; text-align: right;"> <<link "🚪 Leave Neon Fitness and return to the Grand Mall">> <<set $gym_mode to "hub">> <<set $gym_log to "">> <<goto "Financial_Mall">> <</link>> </div> </div> <</nobr>>
<h3>Stream Failed</h3> You fumbled the requests and lost the rhythm. The chat instantly turned toxic, complaining about the performance. You decide to cut the stream early to limit the damage to her online reputation. <br><br> <span style="color: #ff4444;"><strong>Show Failed.</strong> You didn't manage to complete all 10 rounds in time (or you clicked the wrong action).</span> <br><br> /* Même en cas d'échec, l'action compte pour la journée */ <<set $network_girls[$mg_target_index].stream_minigame_played to true>> <<set _oldTime to ($mg_start_time isnot undefined ? $mg_start_time : $time)>> <<unset $mg_start_time, $mg_round, $mg_max_time, $mg_current_time, $mg_actions, $mg_target_action, $mg_target_index>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<link "Return to the Hangar Floor">> <<goto "Location_Hangar">> <</link>> <</if>>
<style> .hotwire-panel { max-width: 600px; margin: 15px auto; background: linear-gradient(180deg, #14171a 0%, #0b0d0f 100%); border: 2px solid #2e353d; border-radius: 12px; padding: 24px; box-shadow: 0 10px 30px rgba(0,0,0,0.85), inset 0 0 25px rgba(0,0,0,0.9); font-family: 'Segoe UI', Tahoma, sans-serif; } .hotwire-top-row { display: flex; justify-content: space-between; align-items: center; background: #07080a; border: 1px solid #262b30; border-radius: 8px; padding: 14px 20px; margin-bottom: 18px; } .hotwire-alarm-box { text-align: left; } .hotwire-timer-digits { font-family: 'Courier New', monospace; font-size: 2.6em; font-weight: 900; color: #ff3333; text-shadow: 0 0 12px rgba(255, 51, 51, 0.7); line-height: 1; } .hotwire-target-box { background: rgba(255, 170, 0, 0.07); border: 1px dashed rgba(255, 170, 0, 0.45); border-radius: 8px; padding: 16px; text-align: center; margin-bottom: 20px; } .hotwire-wires-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; } .wire-btn-wrap button { width: 100%; padding: 14px 10px !important; font-weight: 800 !important; letter-spacing: 1px; border-radius: 8px !important; text-transform: uppercase; transition: transform 0.1s ease, box-shadow 0.15s ease; } .wire-btn-wrap button:hover { transform: translateY(-2px); } .wire-red button { background: linear-gradient(180deg, #5a1212 0%, #2b0707 100%) !important; border: 2px solid #ff3b3b !important; color: #ff9999 !important; box-shadow: 0 0 12px rgba(255, 59, 59, 0.25); } .wire-blue button { background: linear-gradient(180deg, #102a56 0%, #071329 100%) !important; border: 2px solid #3388ff !important; color: #99c2ff !important; box-shadow: 0 0 12px rgba(51, 136, 255, 0.25); } .wire-green button { background: linear-gradient(180deg, #0f4622 0%, #06210f 100%) !important; border: 2px solid #22dd66 !important; color: #99ffbb !important; box-shadow: 0 0 12px rgba(34, 221, 102, 0.25); } .wire-yellow button { background: linear-gradient(180deg, #59440c 0%, #291f04 100%) !important; border: 2px solid #ffcc22 !important; color: #ffe699 !important; box-shadow: 0 0 12px rgba(255, 204, 34, 0.25); } </style> <<nobr>> /* --- INITIALISATION DES VARIABLES --- */ <<set $time_left to 10>> <<set $wires_connected to 0>> <<set _wire_colors to ["RED", "BLUE", "GREEN", "YELLOW"]>> <<set $target_wire to _wire_colors.random()>> <<set $minigame_active to true>> <div class="hotwire-panel"> <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;"> <h3 style="margin: 0; color: #e0e6ed; letter-spacing: 1px; text-transform: uppercase;">🔌 Steering Column Ignition Bypass</h3> <span style="font-size: 0.8em; color: #ff6b6b; background: rgba(255,60,60,0.12); border: 1px solid rgba(255,60,60,0.3); padding: 3px 8px; border-radius: 4px;">ALARM ARMED</span> </div> <p style="color: #9aa5b1; font-size: 0.9em; margin-top: 0; margin-bottom: 16px;"> You rip off the plastic housing beneath the steering wheel. Splice the correct ignition leads before the immobilizer siren wakes the whole block! </p> <div class="hotwire-top-row"> <div class="hotwire-alarm-box"> <div style="font-size: 0.72em; color: #88929b; letter-spacing: 1.5px; text-transform: uppercase;">Immobilizer Countdown</div> <div class="hotwire-timer-digits"><span id="timer">$time_left</span>.0s</div> </div> <div style="text-align: right;"> <div style="font-size: 0.72em; color: #88929b; letter-spacing: 1.5px; text-transform: uppercase;">Ignition Splices</div> <div style="font-size: 1.9em; font-weight: 900; color: #00ffaa; font-family: monospace;"> <span id="progress">0</span> / 5 </div> </div> </div> <div class="hotwire-target-box"> <div style="font-size: 0.8em; color: #aaa; text-transform: uppercase; letter-spacing: 1.5px; margin-bottom: 4px;">⚡ Active Voltage Signal — Splice Terminal:</div> <div id="target-wire" style="font-size: 1.85em; font-weight: 900; color: #ffaa00; letter-spacing: 2px; text-shadow: 0 0 12px rgba(255,170,0,0.45);">$target_wire</div> </div> /* --- CONTRÔLES (BOUTONS) --- */ <div class="hotwire-wires-grid"> /* Bouton ROUGE */ <div class="wire-btn-wrap wire-red"> <<button "🔴 RED WIRE">> <<if $minigame_active is true>> <<if $target_wire is "RED">> <<set $wires_connected += 1>> <<if $wires_connected >= 5>> <<set $minigame_active to false>> <<goto "CarTheft_Win">> <<else>> <<set $target_wire to _wire_colors.random()>> <<replace "#target-wire">>$target_wire<</replace>> <<replace "#progress">>$wires_connected<</replace>> <</if>> <<else>> <<set $time_left -= 2>> <<replace "#timer">>$time_left<</replace>> <</if>> <</if>> <</button>> </div> /* Bouton BLEU */ <div class="wire-btn-wrap wire-blue"> <<button "🔵 BLUE WIRE">> <<if $minigame_active is true>> <<if $target_wire is "BLUE">> <<set $wires_connected += 1>> <<if $wires_connected >= 5>> <<set $minigame_active to false>> <<goto "CarTheft_Win">> <<else>> <<set $target_wire to _wire_colors.random()>> <<replace "#target-wire">>$target_wire<</replace>> <<replace "#progress">>$wires_connected<</replace>> <</if>> <<else>> <<set $time_left -= 2>> <<replace "#timer">>$time_left<</replace>> <</if>> <</if>> <</button>> </div> /* Bouton VERT */ <div class="wire-btn-wrap wire-green"> <<button "🟢 GREEN WIRE">> <<if $minigame_active is true>> <<if $target_wire is "GREEN">> <<set $wires_connected += 1>> <<if $wires_connected >= 5>> <<set $minigame_active to false>> <<goto "CarTheft_Win">> <<else>> <<set $target_wire to _wire_colors.random()>> <<replace "#target-wire">>$target_wire<</replace>> <<replace "#progress">>$wires_connected<</replace>> <</if>> <<else>> <<set $time_left -= 2>> <<replace "#timer">>$time_left<</replace>> <</if>> <</if>> <</button>> </div> /* Bouton JAUNE */ <div class="wire-btn-wrap wire-yellow"> <<button "🟡 YELLOW WIRE">> <<if $minigame_active is true>> <<if $target_wire is "YELLOW">> <<set $wires_connected += 1>> <<if $wires_connected >= 5>> <<set $minigame_active to false>> <<goto "CarTheft_Win">> <<else>> <<set $target_wire to _wire_colors.random()>> <<replace "#target-wire">>$target_wire<</replace>> <<replace "#progress">>$wires_connected<</replace>> <</if>> <<else>> <<set $time_left -= 2>> <<replace "#timer">>$time_left<</replace>> <</if>> <</if>> <</button>> </div> </div> </div> /* --- LE CHRONOMÈTRE (BOUCLE) --- */ <<repeat 1s>> <<if $minigame_active is true>> <<set $time_left -= 1>> <<replace "#timer">>$time_left<</replace>> <<if $time_left <= 0>> <<set $minigame_active to false>> <<goto "CarTheft_Lose">> <</if>> <</if>> <</repeat>> <</nobr>>
<h3>Stream Success!</h3> You successfully directed the show! The viewers went absolutely crazy for the performance, showering the stream with tokens and premium subscriptions. <br><br> <<set _bonusEarned to random(150, 300)>> <<set $money += _bonusEarned>> <<addXP 10>> <span style="color: #00ffaa;"><strong>Perfect Show!</strong> You earned a special tip bonus of $<<print _bonusEarned>>.</span> <br><br> /* On marque la fille comme ayant fait son minijeu aujourd'hui */ <<set $network_girls[$mg_target_index].stream_minigame_played to true>> <<set _oldTime to ($mg_start_time isnot undefined ? $mg_start_time : $time)>> <<unset $mg_start_time, $mg_round, $mg_max_time, $mg_current_time, $mg_actions, $mg_target_action, $mg_target_index>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<link "Return to the Hangar Floor">> <<goto "Location_Hangar">> <</link>> <</if>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/neon.png" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <<nobr>> You are in the Neon District. The blinding glow of holographic signs and flashing advertisements cuts through the persistent street-level smog. The pavements are packed with clubgoers, hustlers, and tourists seeking a good time. A heavy bassline thumps from a nearby underground club, vibrating through the soles of your shoes. <br><br> [[Casino Royale|Neon_Casino]]<br> [[Enter the Neon Hotel|Neon_Hotel]]<br> [[Club Apex|Location_NeonClub]]<br> [[Apex Management (Money Laundering & PR)|Neon_Laundering]]<br> <<if $active_job isnot null>> <br><strong>Active Contract:</strong><br> <<link `"Look for your target (" + $active_job.name + ")"`>> <<set $location_attempt to "Neon">> /* <- CHANGEZ CECI SELON LE QUARTIER */ <<goto "DarkWeb_Job_Resolution">> <</link>><br> <</if>> [[Look for drug deals|Drug_Market]]<br> [[Back to City Map|City_Hub]]<br> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/casino/banner.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Neon Casino - Main Floor</h3> The air is thick with the smell of expensive cologne, smoke, and cheap desperation. The flashing lights of various games beckon you from all sides. <strong>Your Wallet:</strong> $ $money --- <strong>Available Games:</strong> [[Play the Slot Machines|Casino_Slots]] [[Sit at the Blackjack Table|Casino_Blackjack]] [[Sit at the Mahjong Table|Casino_Mahjong]] [[Visit the Casino Bar|Casino_Bar]] --- <<link "Leave the Casino">> /* Sécurité pour nettoyer les variables des jeux */ <<set $slot_result to "">> /* Assurez-vous que "Neon" correspond bien au nom du passage de votre quartier */ <<goto "Neon">> <</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/hotel/hotellobby.jpeg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Neon Hotel - Lobby</h3> The lobby is dressed in faded velvet and bright neon accents. It tries to look luxurious, but the cracked tiles and the tired receptionist tell another story. <strong>Your Wallet:</strong> $ $money | <strong>Your Stamina:</strong> $stamina <<nobr>> --- <<if $hotel_lobby_result isnot "">> $hotel_lobby_result <br>---<br> <</if>> <strong>Hotel Services:</strong><br><br> [[Visit the Hotel Bar|Neon_Hotel_Bar]]<br><br> <<if $has_hotel_room is true>> [[Go up to your room|Player_Hotel_Room]]<br><br> <<else>> <<if $money >= 50>> <<link "Rent a room for the day ($50)">> <<set $money -= 50>> <<set $has_hotel_room to true>> <<set $hotel_shower_used to false>> <<set $room_result to "You just checked in. Here is your keycard.">> <<goto "Player_Hotel_Room">> <</link>><br><br> <<else>> //You don't have enough money to rent a room ($50).//<br><br> <</if>> <</if>> <br><strong>Hustles:</strong><br><br> <<if $stamina >= 40>> <<link "Bribe the manager to clean rooms off-the-books (Costs 40 Stamina, Takes 2 hours)">> <<set _oldTime to $time>> <<set $time += 120>> <<set $stamina -= 40>> <<set $counters.hotel_shifts += 1>> /* Salaire fixe */ <<set _wage to 35>> <<set $money += _wage>> <<set $hotel_lobby_result to "You spend two exhausting hours cleaning up after messy guests. You earned <strong>$" + _wage + "</strong>.">> /* Mécanique d'innovation : Trouver des objets avec l'Intelligence */ <<if random(1, 10) <= $intelligence>> <<if random(1, 2) is 1>> /* Trouvaille d'argent */ <<set _foundCash to random(10, 40)>> <<set $money += _foundCash>> <<set $hotel_lobby_result += "<br><br><em>Perk:</em> While making a bed, you found <strong>$" + _foundCash + "</strong> tucked under the mattress!">> <<else>> /* Trouvaille de bière */ <<set $inventory.beer += 1>> <<set $hotel_lobby_result += "<br><br><em>Perk:</em> You found an unopened Bodega beer left in a mini-fridge. You quickly pocket it.">> <</if>> <</if>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Neon_Hotel">> <</if>> <</link>><br> <<else>> //You are too exhausted to do physical labor right now.//<br> <</if>> <</nobr>> <br>---<br> <<link "Leave the Hotel">> <<set $hotel_lobby_result to "">> <<goto "Neon">> <</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/hotel/bar.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Neon Hotel - The Lounge Bar</h3> This bar is much quieter than the casino. A pianist plays softly in the corner, and the clientele looks slightly more upscale. <strong>Your Wallet:</strong> $ $money <<nobr>> --- <<if $hotel_bar_result isnot "">> $hotel_bar_result <br>---<br> <</if>> <strong>Drinks Menu (Takes 15 minutes):</strong><br><br> <<if $money >= 5>> <<link "Order a Draft Beer ($5 - 1 Unit)">> <<set $money -= 5>> <<set $drunk_units += 1>> <<set $counters.total_alcohol_drank += 1>> <<set $hotel_bar_result to "<em>You sip a cold beer. It tastes better than the bodega ones.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money >= 15>> <<link "Order an aged Whiskey ($15 - 3 Units)">> <<set $money -= 15>> <<set $drunk_units += 3>> <<set $counters.total_alcohol_drank += 1>> <<set $hotel_bar_result to "<em>You drink the whiskey. It's smooth and burns nicely going down.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money >= 25>> <<link "Order a Martini ($25 - 2 Units)">> <<set $money -= 25>> <<set $drunk_units += 2>> <<set $counters.total_alcohol_drank += 1>> <<set $hotel_bar_result to "<em>You sip the martini. You feel like a secret agent for about ten seconds.</em>">> <<processAlcohol>> <</link>><br><br> <</if>> --- <strong>Social:</strong><br><br> <<if $money >= 15>> <<link "Buy a drink for a lonely guest and flirt ($15 - Takes 1 hour)">> <<set $money -= 15>> <<set _oldTime to $time>> <<set $time += 60>> <<set $drunk_units += 1>> <<set $counters.total_alcohol_drank += 1>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Neon_Hotel_Flirt">> <</if>> <</link>><br><br> <</if>> <</nobr>> --- <<link "Back to Hotel Lobby">> <<set $hotel_bar_result to "">> <<goto "Neon_Hotel">> <</link>>
<h3>Neon Hotel - The Lounge Bar</h3> You spot a well-dressed guest drinking alone. You buy them a refill and strike up a conversation. /* Jet de Charisme (1 à 10) */ <<if $charisma >= random(1, 10)>> They smile, clearly charmed by your approach. Since you're already in the hotel, things move fast. "I have a room upstairs," they whisper, handing you their half-empty glass. "Coming?" <br><br> <<link "Follow them upstairs">><<goto "Neon_Hotel_Room">><</link>> <<else>> They look you up and down, unimpressed by your approach. "I'm waiting for someone," they say coldly, turning their back to you. You just wasted your money and your charm. <br><br> <<link "Order a drink to hide your embarrassment">><<set $drunk_units += 1>><<goto "Neon_Hotel_Bar">><</link>> <</if>>
<h3>Neon Hotel - Burglary</h3> <<nobr>> You hold your breath and slowly reach for the wallet, trying to slip the cash out without making a sound. /* Jet d'Intelligence pour la discrétion (1 à 10) */ <<if $intelligence >= random(1, 10)>> /* Réussite : Gain entre 50$ et 150$ */ <<addXP 10>> <<set _stolenCash to random(50, 150)>> <<set $money += _stolenCash>> <<set $counters.successful_dhustles += 1>> You successfully extract <strong>$ _stolenCash</strong>. You carefully put the empty wallet back, grab your clothes, and slip out the door like a ghost. <br><br> <<link "Disappear into the Neon streets">><<goto "Neon">><</link>> <<else>> /* Échec : La victime se réveille */ Your hand slips and knocks a glass off the nightstand. It shatters loudly! They jolt awake. "Hey! What the hell are you doing?!" Panicked, you grab your clothes and bolt out the door before they can call casino security. In your haste, you drop some of your own money in the hallway. /* Pénalité : Perte de 20$ à 50$ */ <<set _droppedCash to random(5, 50)>> <<set $money to Math.max(0, $money - _droppedCash)>> <br><br> <strong>Result:</strong> You failed the theft and lost <strong>$ _droppedCash</strong> during your escape. <br><br> <<link "Flee into the streets">><<goto "Neon">><</link>> <</if>> <</nobr>>
<h3>Neon Hotel - Guest Room</h3> <<set $sex_eth to either("white", "asian", "black")>> <<set $sex_action to either("AN", "VG", "BJ", "SHOWER")>> /* Le jeu va chercher tout seul la bonne limite dans StoryInit ! */ <<set _max_images to setup.sex_limits[$sex_eth][$sex_action]>> <<set _chemin to "images/Sex/" + $sex_eth + "/" + $sex_action + "/">> <<set _min_img to ($sex_eth is "asian" and $sex_action is "VG" ? 1 : 0)>> <<randomImage _chemin _max_images _min_img>> You follow them up to a flashy but somewhat cheap room in the Neon Hotel. Things heat up quickly as the door closes. <em>...Several hours pass...</em> <<nobr>> /* Avancement du temps de 2 heures */ <<set _oldTime to $time>> <<set $time += 120>> /* Vérification du sommeil */ <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> /* Le joueur a passé la nuit ici */ <<set _nextMorning to (Math.floor($time / 1440) * 1440) + 540>> /* Réveil à 9h00 */ <<set $time to _nextMorning>> <<set $stamina to $maxstamina>> <<endOfDayChecks>> You end up falling asleep in their bed. You wake up the next morning feeling refreshed. You can hear the shower running in the bathroom. <<else>> /* Il est encore tôt dans la nuit */ They are now fast asleep, completely knocked out from the alcohol and the exertion. The room is quiet. <</if>> <br><br> You notice their wallet resting openly on the nightstand... <</nobr>> --- <<link "Sneak out and steal the cash (Needs Intelligence)">> <<goto "Neon_Hotel_Robbery">> <</link>><br> <<link "Leave quietly without stealing">> <<set $current_location to "Neon">> <<goto "Neon">> <</link>>
<h3>Neon Hotel - Rented Room</h3> You take your keycard and head up to your room. It's clean, quiet, and the bed is incredibly comfortable compared to your mattress in the Projects. <<link "Go to sleep">> <<set _next5AM to (Math.floor($time / 1440) * 1440) + 1740>> <<set _sleepDuration to Math.max(480, _next5AM - $time)>> <<set $time += _sleepDuration>> /* SOIN DE LUXE : Restauration à 100% peu importe la Stamina ! */ <<set _hpRegen to $maxhp - $hp>> <<set $hp to $maxhp>> <<if _hpRegen > 0>> <<run $morning_notifications.unshift("<em>The luxury hotel bed did wonders for your broken body. You recovered " + _hpRegen + " HP.</em>")>> <<else>> <<run $morning_notifications.unshift("<em>You slept like a baby in the luxury hotel bed.</em>")>> <</if>> <<set $stamina to $maxstamina>> <<endOfDayChecks>> <<goto "Wake_Up">> <</link>>
A scarred bartender glares at you from behind a reinforced wooden counter, waiting for your order. <strong>Your Wallet:</strong> $ $money --- <<if $bar_result isnot "">> $bar_result <br>---<br> <</if>> <strong>Drinks Menu (Takes 15 minutes):</strong><br><br> <<if $money >= 5>> <<link "Order a Piss-warm Beer ($5)">> <<set $money -= 5>> <<set $drunk_units += 1>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>You choke down the warm, watered-down beer. It tastes like copper and regret, but it's cheap.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money >= 12>> <<link "Order a Bootleg Whiskey ($12)">> <<set $money -= 12>> <<set $drunk_units += 3>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>You slam the shot of unbranded whiskey. It burns like battery acid going down and makes your eyes water.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money >= 15>> <<link "Order a Boilermaker ($15)">> <<set $money -= 15>> <<set $drunk_units += 4>> <<set $counters.total_alcohol_drank += 1>> <<set $bar_result to "<em>You drop the shot of rotgut whiskey into your beer and chug it. It hits you like a brick to the head.</em>">> <<processAlcohol>> <</link>><br> <</if>> <<if $money < 5>> //You don't have enough cash for even the cheapest swill. The bartender tells you to get lost.//<br> <</if>> <strong>Social:</strong><br><br> <<if $money >= 10>> <<link "Buy a round for a local and flirt ($10 - Takes 1 hour)">> <<set $money -= 10>> <<set _oldTime to $time>> <<set $time += 60>> <<set $counters.total_alcohol_drank += 1>> <<set $drunk_units += 1>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Outskirts_Bar_Flirt">> <</if>> <</link>><br><br> <</if>> <br>---<br> <<link "Step away from the counter">> <<set $bar_result to "">> <<goto "Location_OutskirtsBar">> <</link>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/outskirts.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> You are in the Outskirts. The dense, suffocating cityscape finally opens up into dusty roads, abandoned motels, and scattered auto shops. It's eerily quiet out here, with only the distant, steady hum of the highway to break the silence. A rusty chain-link fence rattles in the wind, and nobody is around to hear it. <<nobr>> <<if $player_housing is 1>> <<link "Enter your Secured House">><<goto "Home">><</link>> <br> <</if>> [[Honest Dan's Autos|Outskirts_Dealership]]<br> [[Dishonest Daniel's Chop Shop |Chop_Shop]]<br> [[Bruno's Bar, Bed and Breakfast |Location_OutskirtsBar]] <<if $contraband_broker_unlocked is true>> <br> <<link "🚂 Meridian Rail Siding (Bulk Contraband Exchange)">> <<set $exchange_return to "Outskirts">> <<goto "Computer_ContrabandExchange">> <</link>> <</if>> <<if $empire_properties.hangar.owned is true>> <br> <<link "🎥 Visit the Streaming Hangar">> <<goto "Location_Hangar">> <</link>> <</if>> <<if $empire_properties && $empire_properties.growhouse && ($empire_properties.growhouse.owned or $empire_properties.growhouse.rented)>> <br> [[🏡 Suburban Grow House|Property_GrowHouse]]<br> <</if>> <<if $active_job isnot null>> <br><strong>Active Contract:</strong><br> <<link `"Look for your target (" + $active_job.name + ")"`>> <<set $location_attempt to "Outskirts">> /* <- CHANGEZ CECI SELON LE QUARTIER */ <<goto "DarkWeb_Job_Resolution">> <</link>><br> <</if>> /* --- RECHERCHE DE FILLES KIDNAPPÉES ICI --- */ <<set _kidnapped_here to []>> <<for _i to 0; _i < $network_girls.length; _i++>> <<if $network_girls[_i].status is "kidnapped" and $network_girls[_i].kidnap_location is $current_location>> <<run _kidnapped_here.push({ index: _i, girl: $network_girls[_i] })>> <</if>> <</for>> <<if _kidnapped_here.length > 0>> <div style="background-color: #222; padding: 10px; border-left: 3px solid #ffaa00; margin-bottom: 20px;"> <strong>Rival Gang Hideout Spotted!</strong><br> You have intel that your missing employees are being held in an abandoned building nearby. <br><br> <<for _j to 0; _j < _kidnapped_here.length; _j++>> <<set _target to _kidnapped_here[_j]>> <<capture _target>> <<link "Rescue _target.girl.name from the gang">> /* On sauvegarde l'index global de la fille pour la suite */ <<set $rescue_target_index to _target.index>> <<goto "Action_RescueKidnapped">> <</link>><br> <</capture>> <</for>> </div> <</if>> <</nobr>> [[Look for drug deals|Drug_Market]] [[Back to City Map|City_Hub]]
<h3>Outskirts Bar - The Trap</h3> <<nobr>> You spend some time talking to a local woman at the bar, buying her drinks and laying on the charm. <br><br> /* --- 1. JET DE CHARISME (L'appât) --- */ <<if $charisma >= random(1, 10)>> She laughs at your jokes, her guard lowered by the alcohol and your charisma. "This place is a dump," she whispers, leaning in. "Let's go out back to my car for some privacy." <br><br> <<randomImage "images/Sex/street/" 37 0 "#555">> You follow her out into the dark, empty alley behind the bar. As soon as the heavy metal door shuts behind you, cutting off the noise and the view of the bouncer, you start getting to work. As soon as you're done emptying your balls, you step back and zip up. She leans against the wall, catching her breath. <br><br> <div id="alley_choice"> <<if $owned_vehicles.includes("Utility Van") and $garage_level > 0 and $basement_level > 0>> <<set _maxCapacity to ($basement_level is 1 ? 3 : 20)>> <<set _freeSpace to _maxCapacity - $basement_captives.length>> <<if $stamina < 20>> /* Le joueur est trop fatigué */ <span style="color: #ff4444;"><em>You are exhausted. Your muscles ache and your reflexes are dull. You don't have the energy required to pull off a kidnapping right now.</em></span><br><br> <<link "Abort and get some rest">> <<goto $current_location>> <</link>> <<elseif _freeSpace < 1>> /* Le joueur n'a pas assez de place */ <span style="color: #ffaa00;"><em>You do not have any free space in your cellar.</em></span><br><br> <<else>> <<link "Drop the act and kidnap her">> <<replace "#alley_choice">> You corner her against the brick wall, making your real intentions clear. <br><br> <<set $stamina -= 20>> /* --- 2. CALCUL DE LA DISCIPLINE DE DÉPART --- */ <<set _discRoll to random(10, 70) + ($charisma * 3)>> <<if _discRoll > 100>><<set _discRoll to 100>><</if>> <<if _discRoll >= 50>> <span style="color: #ffaa00;"><strong>Submissive (Discipline: <<print _discRoll>>)</strong></span><br> Your dominant aura and cold stare freeze her in place. The realization of what is happening crushes her spirit instantly. She doesn't even scream as you zip-tie her hands and force her into your vehicle. <br><br> <<randomImage "images/Sex/work/nabbing/onesex" 8 1 "#ed2939">> <<set _kidnapSuccess to true>> <<else>> /* --- 3. JET DE FORCE (Si la discipline est < 50) --- */ <span style="color: #ff4444;"><strong>Resistant (Discipline: <<print _discRoll>>)</strong></span><br> Panic sets in. She realizes the danger and immediately fights back, trying to scratch your face, push past you, and scream for help. <br><br> <<set _strRoll to random(1, 10) + $strength>> <<set _strDifficulty to 12>> <<if _strRoll >= _strDifficulty>> You grab her by the throat, brutally cutting off her scream. You slam her against the wall hard enough to daze her. Her resistance crumbles, making it easy to drag her into your vehicle before anyone notices. <br><br> <<set _kidnapSuccess to true>> <<else>> She manages to slip from your grip, kicking you in the shin and running back toward the crowded bar screaming at the top of her lungs. You have no choice but to flee the alley immediately before the locals or the cops show up. <br><br> <strong>Failure:</strong> She escaped. Your face might have been seen. <<addHeat 5>> <br><br> <<link "Flee the area">><<goto "Outskirts">><</link>> <<set _kidnapSuccess to false>> <</if>> <</if>> /* --- 4. AJOUT DE LA CAPTIVE SI SUCCÈS --- */ <<if _kidnapSuccess is true>> <<set $counters.total_kidnappings += 1>> <<addXP 15>> <<addHeat 2>> <<set _randName to $female_names.random()>> <<set _races to ["white", "asian", "black"]>> <<set _race to _races.random()>> <<set _baseIncome to random(30, 100)>> <<run $basement_captives.push({ id: random(100000, 999999), name: _randName, race: _race, discipline: _discRoll, tied: true, clothes_level: 0, surgery_done: false, location: "basement", has_streaming_gear: false, status: "captive", days_in_trouble: 0, base_income: _baseIncome })>> <strong>Success:</strong> You successfully secured the target. She has been transported to your Underground Cellar. <br><br> <<link "Drive back to your hideout">><<goto "Home">><</link>> <</if>> <</replace>> <</link>> <br> <</if>> <</if>> <<link "Leave her in the alley and walk away">> <<goto "Location_OutskirtsBar">> <</link>> </div> <<else>> She drinks the alcohol you bought her, gives you a polite but cold smile, and turns her back to talk to a heavily scarred biker sitting next to her. You've been completely dismissed. <br><br> <<link "Order another drink in defeat">><<goto "Outskirt_Bar_Counter">><</link>> <</if>> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/honestdan.webp" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Honest Dan's Autos (Outskirts)</h3> The lot is filled with decent, middle-class sedans and utility vehicles. Dan waves at you from his small office. <<nobr>> <strong>Your Wallet:</strong> $ $money <strong>Garage Space:</strong> <<if $garage_level > 0>>Available<<else>><span style="color:red;">None</span><</if>> --- <<if $dealership_result isnot "">> $dealership_result <br>---<br> <</if>> <<if $garage_level is 0>> "Hey there," Dan says. "City regulations say I can't sell you a registered vehicle unless you have a certified garage to park it in. Come back when you own a lock-up!" <<else>> <strong>Vehicles for Sale:</strong><br><br> <<if $owned_vehicles.includes("Standard Sedan")>> //You already own the Standard Sedan.//<br><br> <<else>> <strong>Reliable Sedan</strong> - Good for blending in. Moderate speed.<br> <<if $money >= 4000>> <<link "Buy the Reliable Sedan ($4,000)">> <<set $money -= 4000>> <<run $owned_vehicles.push("Standard Sedan")>> <<set $active_vehicle to "Standard Sedan">> <<set $dealership_result to "You purchased the Sedan. Dan's guys delivered it to your garage.">> <<goto "Outskirts_Dealership">> <</link>> <<else>> //Price: $4,000 (Insufficient funds)// <</if>> <br><br> <</if>> <<if $owned_vehicles.includes("Utility Van")>> //You already own the Utility Van.//<br><br> <<else>> <strong>Utility Van</strong> - Slow, but has massive cargo space in the back <br> <<if $money >= 6500>> <<link "Buy the Utility Van ($6,500)">> <<set $money -= 6500>> <<run $owned_vehicles.push("Utility Van")>> <<set $active_vehicle to "Utility Van">> <<set $dealership_result to "You purchased the Van. Dan's guys delivered it to your garage.">> <<goto "Outskirts_Dealership">> <</link>> <<else>> //Price: $6,500 (Insufficient funds)// <</if>> <br><br> <</if>> <</if>> <</nobr>> --- <<link "Leave the Dealership">> <<set $dealership_result to "">> <<goto "Outskirts">> <</link>>
<h3>Public Park</h3> A large expanse of green in the middle of the concrete jungle. Paved paths wind through trees, and wooden benches offer a place to rest. <hr style="border-color: #444;"> /* --- ENTRAÎNEMENT --- */ <<if $stamina >= 30>> <<link "Run for a bit (Costs 30 Stamina, takes 1 hour)">> <<set _oldTime to $time>> <<set $time += 60>> <<set $stamina -= 30>> <<set $counters.basketball_training += 1>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Park_Event">> <</if>> <</link>> <<else>> <span style="color: gray;">//You are too exhausted to run.//</span> <</if>> <br><br> /* --- REPOS --- */ <<link "Rest on a bench (Takes 1 hour, recovers 20 Stamina)">> <<set _oldTime to $time>> <<set $time += 60>> <<set $stamina += 20>> <<if $stamina > $maxstamina>><<set $stamina to $maxstamina>><</if>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Park_Event">> <</if>> <</link>> <br><hr style="border-color: #444;"><br> <<link "Leave the park">><<goto "Financial">><</link>>
<h3>Park Encounter</h3> <<set _rng to random(1, 100)>> <<if _rng <= 40>> /* 40% - Aucun événement */ You finish your activity. The park is quiet today, and nothing catches your attention. <br><br> <<link "Return to the main paths">><<goto "Park">><</link>> <<elseif _rng <= 70>> /* 30% - Fille seule */ While catching your breath, you notice a woman taking a break nearby. She catches your eye and gives a subtle, inviting smile. <br><br> <<link "Approach and propose to hook up">> <<set $park_encounter to "girl">> <<goto "Park_Sex">> <</link>> <br> <<link "Ignore her and leave">><<goto "Park">><</link>> <<elseif _rng <= 85>> /* 15% - Couple H/F */ You spot a couple relaxing on the grass. The man whispers something to his girlfriend, and they both look at you with unmistakable hunger. <br><br> <<link "Approach and propose a threesome">> <<set $park_encounter to "mf_couple">> <<goto "Park_Sex">> <</link>> <br> <<link "Ignore them and leave">><<goto "Park">><</link>> <<else>> /* 15% - Couple F/F */ You notice two women sitting close together. They are clearly a couple, but the way they eye you suggests they are looking for a third participant. <br><br> <<link "Approach and propose a threesome">> <<set $park_encounter to "ff_couple">> <<goto "Park_Sex">> <</link>> <br> <<link "Ignore them and leave">><<goto "Park">><</link>> <</if>>
<h3>Public Indecency</h3> <<set _charmRoll to random(1, 10) + $charisma>> <<set _difficulty to 12>> <<if _charmRoll >= _difficulty>> <<if $park_encounter is "girl">> You walk up to her. It doesn't take much talking. You lead her behind some thick bushes, away from the main path. <br><br> <<set $counters.outside += 1>> <<randomImage "images/Sex/park/solo/bj/" 14 0 "#555">> <<randomImage "images/Sex/park/solo/sex/" 37 0 "#555">> <<randomImage "images/Sex/park/solo/cum/" 7 0 "#555">> <br> She drops to her knees, and you both enjoy a highly illegal public quickie. <<elseif $park_encounter is "mf_couple">> You approach the couple. They lead you to a hidden grove off the trail. <br><br> <<set $counters.outside += 1>> <<randomImage "images/Sex/park/mf/bj/" 2 0 "#555">> <<randomImage "images/Sex/park/mf/sex/" 4 0 "#555">> <br> The two of them share you, turning a quiet day at the park into a sweaty public threesome. <<elseif $park_encounter is "ff_couple">> You walk over to the two women. They giggle and eagerly pack up their blanket, leading you deep into the woods. <br><br> <<set $counters.outside += 1>> <<randomImage "images/Sex/park/ff/sex/" 8 0 "#555">> <<randomImage "images/Sex/park/ff/cum/" 2 0 "#555">> <br> You find yourself sandwiched between them. A very satisfying public encounter. <</if>> <br><br> <<link "Zip up and head back">><<goto "Park">><</link>> <<else>> <span style="color: #ff4444;"><strong>REJECTION</strong></span><br><br> <<if $park_encounter is "girl">> She looks you up and down, scoffs, and immediately walks away. You misread the signals. <<elseif $park_encounter is "mf_couple">> The man stands up, aggressively telling you to back off. You decide it is best to leave before it escalates. <<elseif $park_encounter is "ff_couple">> They exchange an awkward glance before ignoring you completely. You ruined the mood. <</if>> <br><br> <<link "Walk away in shame">><<goto "Park">><</link>> <</if>>
<<if $player_housing is 0>> <<set $current_location to "Projects">> <<elseif $player_housing is 1>> <<set $current_location to "Outskirts">> <<elseif $player_housing is 2>> <<set $current_location to "Financial">> <</if>> <br><br> <<set $has_hotel_room to false>> <<if $hp <= 0>> Someone found you unconscious on the street and dragged you back to your apartment in the Projects. You are bruised and broken, but alive. You crawl into your bed. <<else>> <<if $player_housing is 0>> It's past 4:00 AM. You are completely exhausted. You stumble back to your apartment and collapse on your bed. <<elseif $player_housing is 1>> It's past 4:00 AM. You are completely exhausted. You stumble back to your safehouse and collapse on your bed. <<elseif $player_housing is 2>> It's past 4:00 AM. You are completely exhausted. You stumble back to your penthouse and collapse on your bed. <</if>> <br><br> <</if>> <<link "Sleep">> <<set _next5AM to (Math.floor($time / 1440) * 1440) + 1740>> <<set _sleepDuration to Math.max(480, _next5AM - $time)>> <<set $time += _sleepDuration>> /* 0 régénération naturelle. Mais si le joueur a perdu un combat, on évite le blocage à 0 HP */ <<if $hp <= 0>> <<set $hp to 15>> <</if>> <<set $stamina to $maxstamina>> <<endOfDayChecks>> <<set $wake_location to "Home">> <<goto "Wake_Up">> <</link>>
<h3>Character Perks</h3> Passive abilities unlocked through your actions in the city. <hr style="border-color: #444;"> <<nobr>> <<set _hasPerks to false>> /* --- DÉBUT DE LA GRILLE CSS --- */ <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 15px; margin-top: 15px; margin-bottom: 15px;"> <<if $traits.scavenger is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/bg/natdiglib_30312_extralarge.webp'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Scavenger</strong><br><br> You have an eagle eye for loot. Grants <span style="color: #00aaff;">+1 Intelligence</span>. </div> <</if>> <<if $traits.exhibitionnist is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/bg/deguisement-grand-mere-exhibitionniste.jpg'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Exhibitionnist</strong><br><br> You have a knack for public sex. Grants bonus money for whores on the street, and <span style="color: #ff55ff;">+1 Charisma</span>. </div> <</if>> <<if $traits.rough is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Rough</strong><br><br> You're an animal in bed, and gained the stamina to sustain it. Use less stamina for every sex action, and gain <span style="color: #00ffaa;">+10 Stamina</span>. </div> <</if>> <<if $traits.swimmer is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/bg/Leon-Marchand-qui-est-le-nageur-francais-qui-risque-de-tout-rafler-aux-JO.jpg'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Swimmer</strong><br><br> Fighting ocean currents has expanded your lungs. Grants <span style="color: #00ffaa;">+15 Max Stamina</span>. </div> <</if>> <<if $traits.blue_collar is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/bg/bg_bc_perk.webp'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Blue Collar</strong><br><br> Manual labor has hardened your body. Grants <span style="color: #00ffaa;">+10 Max Stamina</span>. </div> <</if>> <<if $traits.heartthrob is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Heartthrob</strong><br><br> You know how to satisfy a woman, especially when money is involved. Grants <span style="color: #ff55ff;">+1 Charisma</span>. </div> <</if>> <<if $traits.iron_liver is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Iron Liver</strong><br><br> Increases your alcohol tolerance. Negative effects and blackouts trigger at much higher intoxication levels. </div> <</if>> <<if $traits.sprinter is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/bg/sprint.jpg'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Sprinter</strong><br><br> Reduces all travel times by <span style="color: #ffaa00;">10 minutes</span>. </div> <</if>> <<if $traits.athletic is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Athletic</strong><br><br> Maximum Stamina is increased by 20, <span style="color: #ff4444;">+1 Strength</span>. </div> <</if>> <<if $traits.bulk_buyer is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Bulk Buyer</strong><br><br> Street dealers offer significantly larger quantities of product. </div> <</if>> <<if $traits.smooth_criminal is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Smooth Criminal</strong><br><br> You have mastered the art of the hustle. Grants <span style="color: #ff55ff;">+1 Charisma</span> and <span style="color: #00aaff;">+1 Intelligence</span>. </div> <</if>> <<if $traits.tough_skin is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Tough Skin</strong><br><br> Your body has adapted to pain from past beatings. Grants <span style="color: #ff4444;">+10 Max HP</span>. </div> <</if>> /* --- NARCOTICS DEALING TRAITS --- */ <<if $traits.dealer_3 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #ffd700; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 10px rgba(255,215,0,0.3);"> <strong style="color: #ffd700;">Cartel Kingpin (Dealing Lv.3)</strong><br><br> The city's narcotics trade answers to you. Grants <span style="color: #00ffaa;">+50% drug sale income</span>, <span style="color: #00e5ff;">undercover narc immunity</span>, <span style="color: #ffaa00;">+1 bonus unit on cooking/pressing</span>, <span style="color: #00aaff;">+1 Intelligence</span>, <span style="color: #ff55ff;">+1 Charisma</span>, <span style="color: #ff4444;">+20 Max HP</span>, and <span style="color: #00ffaa;">+15 Max Stamina</span>. </div> <<elseif $traits.dealer_2 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #00ffaa; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 8px rgba(0,255,170,0.25);"> <strong style="color: #00ffaa;">Trap Lord (Dealing Lv.2)</strong><br><br> You control supply across your territory. Grants <span style="color: #00ffaa;">+30% drug sale income</span>, <span style="color: #ffaa00;">-35% dealing heat</span>, boosts <span style="color: #00ffaa;">gang runner yields by +25%</span>, <span style="color: #ff55ff;">+1 Charisma</span>, and <span style="color: #00ffaa;">+10 Max Stamina</span>. </div> <<elseif $traits.dealer_1 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #00aaff; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,170,255,0.2);"> <strong style="color: #00aaff;">Corner Pusher (Dealing Lv.1)</strong><br><br> Sharp eye for customer twitches and street margins. Grants <span style="color: #00ffaa;">+15% drug sale income</span>, <span style="color: #ffaa00;">-20% corner dealing heat</span>, and <span style="color: #00aaff;">+1 Intelligence</span>. </div> <</if>> /* --- GYM TRAITS --- */ <<if $traits.gym_5 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #ffd700; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 10px rgba(255,215,0,0.25);"> <strong style="color: #ffd700;">Apex Titan (Gym Lv.5)</strong><br><br> A walking Greek god of iron and power. Grants <span style="color: #ff4444;">+5 Strength, +35 Max HP</span>, <span style="color: #00ffaa;">+30 Max Stamina</span>, and <span style="color: #ff55ff;">+2 Charisma</span>. </div> <<elseif $traits.gym_4 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #00e5ff; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong style="color: #00e5ff;">Olympian (Gym Lv.4)</strong><br><br> Monstrous mass combined with elite conditioning. Grants <span style="color: #ff4444;">+4 Strength, +20 Max HP</span>, <span style="color: #00ffaa;">+15 Max Stamina</span>, and <span style="color: #ff55ff;">+1 Charisma</span>. </div> <<elseif $traits.bodybuilder is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Bodybuilder (Gym Lv.3)</strong><br><br> You are an absolute behemoth of muscle. Grants <span style="color: #ff4444;">+3 Strength, +10 Max HP</span>, and <span style="color: #ff55ff;">+1 Charisma</span>. </div> <<elseif $traits.ripped is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Ripped (Gym Lv.2)</strong><br><br> You are built like a machine. Grants <span style="color: #ff4444;">+2 Strength</span> and <span style="color: #ff55ff;">+1 Charisma</span>. </div> <<elseif $traits.jacked is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Jacked (Gym Lv.1)</strong><br><br> You are noticeably muscular. Grants <span style="color: #ff4444;">+1 Strength</span>. </div> <</if>> /* --- KIDNAPPING TRAITS --- */ <<if $traits.kidnapper_3 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Boogeyman (Kidnapping Lv.3)</strong><br><br> You are an apex predator. All kidnapping attempts automatically succeed. </div> <<elseif $traits.kidnapper_2 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Shadow (Kidnapping Lv.2)</strong><br><br> You are highly efficient at abductions. Significantly reduces kidnapping difficulty. </div> <<elseif $traits.kidnapper_1 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Prowler (Kidnapping Lv.1)</strong><br><br> You know how to isolate a target. Slightly reduces kidnapping difficulty. </div> <</if>> /* --- CONTRACTOR TRAITS --- */ <<if $traits.contractor_3 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Shadow Broker (Contractor Lv.3)</strong><br><br> Elite darknet operative. Grants <span style="color: #00ffaa;">+50% ShadowBoard payouts</span>, <span style="color: #00ffaa;">+15 Max Stamina</span>, a <span style="color: #ffaa00;">4th daily contract</span>, and <span style="color: #00aaff;">+1 Intelligence</span>. </div> <<elseif $traits.contractor_2 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Fixer's Favorite (Contractor Lv.2)</strong><br><br> Trusted ShadowBoard specialist. Grants <span style="color: #00ffaa;">+30% ShadowBoard payouts</span>, <span style="color: #00ffaa;">+15 Max Stamina</span>, and a <span style="color: #ffaa00;">4th daily contract</span>. </div> <<elseif $traits.contractor_1 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Freelancer (Contractor Lv.1)</strong><br><br> Proven darknet merc. Grants <span style="color: #00ffaa;">+15% ShadowBoard payouts</span> and <span style="color: #00ffaa;">+15 Max Stamina</span>. </div> <</if>> /* --- APEX CLEANER TRAITS --- */ <<if $traits.cleaner_3 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Untouchable (Apex Lv.3)</strong><br><br> Master corporate fixer. Weekly Apex contracts offer <span style="color: #ffaa00;">all 3 stat choices</span>, scrub <span style="color: #00ffaa;">-40% Heat</span>, and grant <span style="color: #ff55ff;">+1 Charisma</span>. </div> <<elseif $traits.cleaner_2 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Spin Doctor (Apex Lv.2)</strong><br><br> Trusted corporate fixer. Weekly Apex contracts offer <span style="color: #ffaa00;">3 contracts to choose from</span> and scrub <span style="color: #00ffaa;">-30% Heat</span>. </div> <<elseif $traits.cleaner_1 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Corporate Cleaner (Apex Lv.1)</strong><br><br> Discreet troubleshooter for Apex Management. Weekly Apex contracts scrub <span style="color: #00ffaa;">-22% Heat</span>. </div> <</if>> /* --- COMBAT TRAITS --- */ <<if $traits.combat_7 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Reaper (Combat Lv.7)</strong><br><br> Unkillable apex predator. Grants <span style="color: #ff4444;">+40 Max HP, +3 Strength</span>, <span style="color: #00ffaa;">+20 Max Stamina</span>, and <span style="color: #ff55ff;">+1 Charisma</span>. </div> <<elseif $traits.combat_6 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Death (Combat Lv.6)</strong><br><br> You bring absolute ruin. Grants <span style="color: #ff4444;">+20 Max HP, +2 Strength</span>, <span style="color: #00ffaa;">+20 Max Stamina</span>, and <span style="color: #ff55ff;">+1 Charisma</span>. </div> <<elseif $traits.combat_5 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Psycho (Combat Lv.5)</strong><br><br> People fear your presence. Grants <span style="color: #ff4444;">+20 Max HP, +1 Strength</span>, <span style="color: #00ffaa;">+20 Max Stamina</span>, and <span style="color: #ff55ff;">+1 Charisma</span>. </div> <<elseif $traits.combat_4 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Killer (Combat Lv.4)</strong><br><br> You fight with lethal efficiency. Grants <span style="color: #ff4444;">+20 Max HP, +1 Strength</span>, and <span style="color: #00ffaa;">+20 Max Stamina</span>. </div> <<elseif $traits.combat_3 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Fighter (Combat Lv.3)</strong><br><br> Your technique causes maximum damage. Grants <span style="color: #ff4444;">+10 Max HP, +1 Strength</span>, and <span style="color: #00ffaa;">+10 Max Stamina</span>. </div> <<elseif $traits.combat_2 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Brawler (Combat Lv.2)</strong><br><br> Perfect breath and energy management. Grants <span style="color: #ff4444;">+10 Max HP</span> and <span style="color: #00ffaa;">+10 Max Stamina</span>. </div> <<elseif $traits.combat_1 is true>> <<set _hasPerks to true>> <div style="background-image: linear-gradient(rgba(20, 20, 20, 0.85), rgba(20, 20, 20, 0.85)), url('images/ui/perk_bg.png'); background-size: cover; background-position: center; border: 1px solid #444; border-radius: 8px; padding: 15px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.5);"> <strong>Novice (Combat Lv.1)</strong><br><br> Cold focus replaces adrenaline. Grants <span style="color: #ff4444;">+10 Max HP</span>. </div> <</if>> /* --- FIN DE LA GRILLE CSS --- */ </div> /* --- VÉRIFICATION FINALE --- */ <<if _hasPerks is false>> <div style="text-align: center;"> <span style="color: gray;">//Keep surviving and exploring the streets to develop new traits.//</span><br><br> </div> <</if>> <</nobr>> <hr style="border-color: #444;"> <<link "Go back">> <<if $menu_return_passage isnot undefined and $menu_return_passage isnot "" and !["War_Raid_Hub", "War_Assault_Start", "War_Assault_Win", "Gunfight_Main", "Gunfight_Turn", "Combat_Main", "Combat_Turn", "Combat_Win", "Combat_Lose"].includes($menu_return_passage)>> <<goto $menu_return_passage>> <<elseif $in_prison is true>> <<goto "Prison_Hub">> <<else>> <<set $menu_return_passage to $current_location>> <<goto $current_location>> <</if>> <</link>>
<h3>👑 Empire Management</h3> <<nobr>> <<if $empire_properties === undefined>> <<set $empire_properties to { hangar: { owned: false, capacity: 10, level: 1 }, brothel: { owned: false, capacity: 5, level: 1, lobbying_done: false }, escort: { owned: false, capacity: 3, level: 1 }, traphouse: { owned: false, rented: false, level: 1 }, growhouse: { owned: false, rented: false, level: 1 }, chemlab: { owned: false, rented: false, level: 1 } }>> <<else>> <<if $empire_properties.traphouse === undefined>><<set $empire_properties.traphouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.growhouse === undefined>><<set $empire_properties.growhouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.chemlab === undefined>><<set $empire_properties.chemlab to { owned: false, rented: false, level: 1 }>><</if>> <</if>> <<if $grow_house === undefined>> <<set $grow_house to { crop_active: false, strain: "none", planted_day: -1, grow_days_needed: 2, harvest_qty: 0, ready: false }>> <</if>> /* --- BARRE DE NAVIGATION (5 ONGLETS) --- */ <div style="background-color: #222; padding: 10px; text-align: center; margin-bottom: 20px;"> <<link "Back to Home Screen">> <<goto "Phone_Main">> <</link>> | <<link "👥 Staff & Roster">> <<set $current_empire_tab to "staff">> <<goto "Phone_EmpireApp">> <</link>> | <<link "🏢 Properties">> <<set $current_empire_tab to "properties">> <<goto "Phone_EmpireApp">> <</link>> | <<link "🔫 Gang & Bodyguards">> <<set $current_empire_tab to "gang">> <<goto "Phone_EmpireApp">> <</link>> | <<link "🛡️ Bodyguard Squad">> <<set $current_empire_tab to "bodyguards">> <<goto "Phone_EmpireApp">> <</link>> | <<link "⚔️ Turf War">> <<set $current_empire_tab to "turf">> <<goto "Phone_EmpireApp">> <</link>> | <<link "🏡 Lifestyle">> <<set $current_empire_tab to "housing">> <<goto "Phone_EmpireApp">> <</link>> </div> <<if $laundering_fronts is undefined>> <<set $laundering_fronts to { arcade: { owned: ($laundering_level >= 1), level: 1, capacity: 6 }, gallery: { owned: ($laundering_level >= 2), level: 1, capacity: 4 }, bank: { owned: ($laundering_level >= 3), level: 1, capacity: 2 } }>> <</if>> <<set _hangar_count to 0, _brothel_count to 0, _escort_count to 0, _arcade_count to 0, _gallery_count to 0, _bank_count to 0>> <<for _k to 0; _k < $network_girls.length; _k++>> <<if $network_girls[_k].location is "hangar">><<set _hangar_count++>><</if>> <<if $network_girls[_k].location is "brothel">><<set _brothel_count++>><</if>> <<if $network_girls[_k].location is "escort">><<set _escort_count++>><</if>> <<if $network_girls[_k].location is "arcade">><<set _arcade_count++>><</if>> <<if $network_girls[_k].location is "gallery">><<set _gallery_count++>><</if>> <<if $network_girls[_k].location is "bank">><<set _bank_count++>><</if>> <</for>> /* ======================================================= */ /* ONGLET : LIFESTYLE */ /* ======================================================= */ <<if $current_empire_tab is "housing">> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ffffff; margin-bottom: 20px;"> <h4>🏡 Personal Housing & Lifestyle</h4> <<if $player_housing is 0>> <strong>Current Residence:</strong> Shitty Apartment (Projects) — <span style="color: #ffaa00;">Rented ($200/week)</span><br> <em>Your living conditions are holding back your reputation (Capped at Lv. 5). Visit Dynasty Real Estate in the Financial District to lease or buy a Secured House.</em> <<elseif $player_housing is 1>> <strong>Current Residence:</strong> Secured House (Outskirts) — <<if $player_housing_rented is true>><span style="color: #00e5ff;">Leased ($2,500/week — Can buy deed at Dynasty Real Estate)</span><<else>><span style="color: #00ffaa;">Owned Outright ($600/week property tax)</span><</if>><br> <em>A decent place, but the true elites live high up in the sky (Capped at Lv. 10). Visit Dynasty Real Estate in the Financial District to lease or buy The Apex Penthouse.</em> <<elseif $player_housing is 2>> <strong>Current Residence:</strong> Luxury Penthouse (Financial / Neon) — <<if $player_housing_rented is true>><span style="color: #00e5ff;">Leased ($18,000/week — Can buy deed at Dynasty Real Estate)</span><<else>><span style="color: #00ffaa;">Owned Outright ($2,500/week luxury tax)</span><</if>><br> <span style="color: #00ffaa;"><em>You are at the absolute top of the city. Everyone looks up to you.</em></span> <</if>> </div> /* ======================================================= */ /* ONGLET : PERSONNEL */ /* ======================================================= */ <<elseif $current_empire_tab is "staff">> <<set $staff_filter to $staff_filter || "all">> <strong>Active Roster:</strong> $network_girls.length employees. <br><br> /* --- MENU DE FILTRAGE --- */ <div style="background-color: #333; padding: 5px; text-align: center; margin-bottom: 15px; border: 1px solid #555;"> <strong>Filter: </strong> <<if $staff_filter is "all">><span style="color: #00ffaa;">[ All ]</span><<else>><<link "[ All ]">><<set $staff_filter to "all">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "street">><span style="color: #00ffaa;">[ Street ]</span><<else>><<link "[ Street ]">><<set $staff_filter to "street">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "hangar">><span style="color: #00ffaa;">[ Hangar ]</span><<else>><<link "[ Hangar ]">><<set $staff_filter to "hangar">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "brothel">><span style="color: #00ffaa;">[ Brothel ]</span><<else>><<link "[ Brothel ]">><<set $staff_filter to "brothel">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "escort">><span style="color: #00ffaa;">[ VIP Escort ]</span><<else>><<link "[ VIP Escort ]">><<set $staff_filter to "escort">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "arcade">><span style="color: #00ffaa;">[ Arcade ]</span><<else>><<link "[ Arcade ]">><<set $staff_filter to "arcade">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "gallery">><span style="color: #00ffaa;">[ Gallery ]</span><<else>><<link "[ Gallery ]">><<set $staff_filter to "gallery">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "bank">><span style="color: #00ffaa;">[ Bank ]</span><<else>><<link "[ Bank ]">><<set $staff_filter to "bank">><<goto "Phone_EmpireApp">><</link>><</if>> | <<if $staff_filter is "hideout">><span style="color: #00ffaa;">[ Hideout ]</span><<else>><<link "[ Hideout ]">><<set $staff_filter to "hideout">><<goto "Phone_EmpireApp">><</link>><</if>> </div> <<if $network_girls.length is 0>> <em>You don't have any employees in your network yet.</em> <<else>> <<set _displayed_count to 0>> <<for _i to 0; _i < $network_girls.length; _i++>> <<set _girl to $network_girls[_i]>> <<if $staff_filter isnot "all" and _girl.location isnot $staff_filter>> <<continue>> <</if>> <<set _displayed_count++>> <<capture _i, _girl>> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ffaa00; margin-bottom: 10px;"> <strong><<print _girl.name>></strong> (<<print _girl.race.toUpperFirst()>>)<br> <strong>Base Earnings:</strong> <span style="color: #00ffaa;">$<<print _girl.base_income>></span> / day | <strong>Wardrobe:</strong> Lv.<<print _girl.clothes_level>> | <strong>Surgery:</strong> <<print (_girl.surgery_done ? "Yes" : "No")>> | <strong>4K Gear:</strong> <<print (_girl.has_streaming_gear ? "Yes" : "No")>><br> <<if _girl.status is "arrested">> <span style="color: #ff4444;"><strong>STATUS: ARRESTED (At Police Station)</strong></span> <<elseif _girl.status is "kidnapped">> <span style="color: #ffaa00;"><strong>STATUS: MISSING (Taken to <<print _girl.kidnap_location>>)</strong></span> <<else>> <strong>Current Location:</strong> <span style="color: #00ffaa;"><<print _girl.location.toUpperFirst()>></span><br> <br><strong>Assign to:</strong><br> <<if _girl.location isnot "street">> <<link "[ The Streets ]">><<set $network_girls[_i].location to "street">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if $empire_properties.hangar.owned is true and _girl.location isnot "hangar">> <<if _girl.has_streaming_gear is false>> <span style="color: #888;">[ Hangar: Needs 4K Gear ]</span> <<elseif _hangar_count >= $empire_properties.hangar.capacity>> <span style="color: #888;">[ Hangar: Full ]</span> <<else>> <<link "[ Streaming Hangar ]">><<set $network_girls[_i].location to "hangar">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if $empire_properties.brothel.owned is true and _girl.location isnot "brothel">> <<if _brothel_count >= $empire_properties.brothel.capacity>> <span style="color: #888;">[ Brothel: Full ]</span> <<else>> <<link "[ Velvet Rose Brothel ]">><<set $network_girls[_i].location to "brothel">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if $empire_properties.escort.owned is true and _girl.location isnot "escort">> <<if _girl.clothes_level < 2>> <span style="color: #888;">[ VIP Escort: Needs Lv.2 Wardrobe ]</span> <<elseif _escort_count >= $empire_properties.escort.capacity>> <span style="color: #888;">[ VIP Escort: Full ]</span> <<else>> <<link "[ VIP Escort Platform ]">><<set $network_girls[_i].location to "escort">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if $laundering_fronts.arcade.owned is true and _girl.location isnot "arcade">> <<if _arcade_count >= $laundering_fronts.arcade.capacity>> <span style="color: #888;">[ Neon Arcade: Full ]</span> <<else>> <<link "[ 🕹️ Neon Arcade (-1% Heat) ]">><<set $network_girls[_i].location to "arcade">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if $laundering_fronts.gallery.owned is true and _girl.location isnot "gallery">> <<if _girl.clothes_level < 1>> <span style="color: #888;">[ Art Gallery: Needs Lv.1+ Wardrobe ]</span> <<elseif _gallery_count >= $laundering_fronts.gallery.capacity>> <span style="color: #888;">[ Art Gallery: Full ]</span> <<else>> <<link "[ 🖼️ Art Gallery (-2% Heat) ]">><<set $network_girls[_i].location to "gallery">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if $laundering_fronts.bank.owned is true and _girl.location isnot "bank">> <<if _girl.clothes_level < 2>> <span style="color: #888;">[ Cayman Bank: Needs Lv.2 Wardrobe ]</span> <<elseif _bank_count >= $laundering_fronts.bank.capacity>> <span style="color: #888;">[ Cayman Bank: Full ]</span> <<else>> <<link "[ 🏦 Cayman Bank (-3% Heat) ]">><<set $network_girls[_i].location to "bank">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if _girl.location isnot "hideout">> <<link "[ Hideout (Rest) ]">><<set $network_girls[_i].location to "hideout">><<goto "Phone_EmpireApp">><</link>> <</if>> /* Upgrades rapides depuis le téléphone */ <br><br><strong>Quick Upgrades (Wallet: $<<print $money>>):</strong><br> <<if _girl.has_streaming_gear is false and $money >= 500>> <<link "[ Buy 4K Streaming Gear ($500) ]">> <<set $money -= 500>><<set $network_girls[_i].has_streaming_gear to true>><<goto "Phone_EmpireApp">> <</link>> <</if>> <<if _girl.clothes_level is 0 and $money >= 400>> <<link "[ Buy Streetwear Lv.1 ($400) ]">> <<set $money -= 400>><<set $network_girls[_i].clothes_level to 1>><<set $network_girls[_i].base_income += 15>><<goto "Phone_EmpireApp">> <</link>> <<elseif _girl.clothes_level is 1 and $money >= 1200>> <<link "[ Buy Luxury Wardrobe Lv.2 ($1,200) ]">> <<set $money -= 1200>><<set $network_girls[_i].clothes_level to 2>><<set $network_girls[_i].base_income += 25>><<goto "Phone_EmpireApp">> <</link>> <</if>> <<if _girl.surgery_done is false and $money >= 2500>> <<link "[ Cosmetic Surgery ($2,500) ]">> <<set $money -= 2500>><<set $network_girls[_i].surgery_done to true>><<set $network_girls[_i].base_income += 40>><<goto "Phone_EmpireApp">> <</link>> <</if>> <</if>> </div> <</capture>> <</for>> <<if _displayed_count is 0>> <em>No employees found in this location.</em> <</if>> <</if>> <br><hr style="border: 1px solid #444;"><br> <h3>⛓️ Basement (Training Facility)</h3> <<if $basement_captives.length is 0>> <em>The basement cells are currently empty.</em> <<else>> <<set _maxCapacity to ($basement_level is 1 ? 3 : 20)>> <strong>Cellar Occupancy:</strong> $basement_captives.length / _maxCapacity cells occupied. <<for _c to 0; _c < $basement_captives.length; _c++>> <<set _captive to $basement_captives[_c]>> <<capture _c, _captive>> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #8800ff; margin-bottom: 10px;"> <strong><<print _captive.name>></strong> (<<print _captive.race.toUpperFirst()>>)<br> <strong>Status:</strong> <span style="color: #aa55ff;">Captive / In Training</span><br> <strong>Discipline:</strong> <<if _captive.discipline >= 100>> <span style="color: #00ffaa;">100 / 100 (Ready to work)</span> <br><br> <div style="background-color: #222; padding: 5px; text-align: center; border: 1px solid #00ffaa;"> <<link "Promote to Active Employee">> <<set $basement_captives[_c].status to "active">> <<set $basement_captives[_c].location to "hideout">> <<set $basement_captives[_c].tied to false>> <<run $network_girls.push($basement_captives[_c])>> <<run $basement_captives.deleteAt(_c)>> <<goto "Phone_EmpireApp">> <</link>> </div> <br> <<else>> <span style="color: #ffaa00;"><<print _captive.discipline>> / 100</span> <br><br> <</if>> <<link "[ Go down to the Basement ]">> <<goto "Player_Basement">> <</link>> </div> <</capture>> <</for>> <</if>> /* ======================================================= */ /* ONGLET : PROPRIÉTÉS */ /* ======================================================= */ <<elseif $current_empire_tab is "properties">> <strong>Real Estate & Faction Portfolio</strong><br><br> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00aaff; margin-bottom: 10px;"> <h4>🎥 Abandoned Warehouse (Streaming Hangar)</h4> <<if $empire_properties.hangar.owned is false>> <span style="color: #888;">Status: Unowned (Purchase on Shadow Real Estate).</span> <<else>> <span style="color: #00ffaa;">Status: Operational (Lv. <<print $empire_properties.hangar.level>>)</span><br> <strong>Capacity:</strong> <<print _hangar_count>> / <<print $empire_properties.hangar.capacity>> stations filled.<br> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ff0055; margin-bottom: 10px;"> <h4>🍷 The Velvet Rose (Brothel)</h4> <<if $empire_properties.brothel.owned is false>> <span style="color: #888;">Status: Unowned (Requires City Hall Lobbying / Corrupt Ex-Cop, then purchase on Shadow Real Estate).</span> <<else>> <span style="color: #00ffaa;">Status: Operational (Lv. <<print $empire_properties.brothel.level>>)</span><br> <strong>Capacity:</strong> <<print _brothel_count>> / <<print $empire_properties.brothel.capacity>> rooms filled.<br> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ffd700; margin-bottom: 10px;"> <h4>💎 Luxury Escort Platform</h4> <<if $empire_properties.escort.owned is false>> <span style="color: #888;">Status: Unowned (Purchase on Shadow Real Estate).</span> <<else>> <span style="color: #00ffaa;">Status: Operational (Lv. <<print $empire_properties.escort.level>>)</span><br> <strong>Capacity:</strong> <<print _escort_count>> / <<print $empire_properties.escort.capacity>> VIP profiles active.<br> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ffaa00; margin-bottom: 10px;"> <h4>🔧 Syndicate Chop Shop (Slums / Outskirts)</h4> <<if $chop_shop_owned is false>> <span style="color: #888;">Status: Unowned (Buy partnership at Dishonest Daniel's Chop Shop).</span> <<else>> <span style="color: #00ffaa;">Status: Operational (Lv. <<print $chop_shop_level>>)</span> — Generates passive daily income & strips stolen cars overnight.<br> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00ffaa; margin-bottom: 10px;"> <h4>🏭 Warehouse 12 — Contraband Storage Depot (Port)</h4> <<if $contraband_warehouse_owned isnot true>> <span style="color: #888;">Status: Unowned (Acquire lease at Warehouse 12 on the Port for $8,000).</span> <<else>> <<set _phoneCrates to 0>> <<for _cIdx to 0; _cIdx < $contraband_types.length; _cIdx++>> <<set _phoneCrates += ($container_stash[$contraband_types[_cIdx]] || 0)>> <</for>> <span style="color: #00ffaa;">Status: Operational (Lv. <<print $contraband_warehouse_level>>)</span><br> <strong>Stored Crates:</strong> <<print _phoneCrates>> / <<print $contraband_warehouse_capacity>> crates | <strong>Weekly Lease:</strong> -$<<print (500 + ($contraband_warehouse_level * 150))>>/week<br> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #aa00ff; margin-bottom: 10px;"> <h4>🏦 Apex Laundering Fronts (Neon Strip)</h4> <strong>Offshore Clean Balance:</strong> <span style="color: #00ffaa;">$<<print $laundered_money>></span><br><br> <strong>🕹️ Neon Arcade:</strong> <<if $laundering_fronts.arcade.owned is false>> <span style="color: #888;">Unowned (Purchase at Apex Management on the Neon Strip).</span><br> <<else>> <span style="color: #00ffaa;">Operational (Lv. <<print $laundering_fronts.arcade.level>>)</span> — <strong>Spots:</strong> <<print _arcade_count>> / <<print $laundering_fronts.arcade.capacity>> (-<<print _arcade_count>>% Heat/night)<br> <</if>> <strong>🖼️ Luxury Art Gallery:</strong> <<if $laundering_fronts.gallery.owned is false>> <span style="color: #888;">Unowned.</span><br> <<else>> <span style="color: #00ffaa;">Operational (Lv. <<print $laundering_fronts.gallery.level>>)</span> — <strong>Spots:</strong> <<print _gallery_count>> / <<print $laundering_fronts.gallery.capacity>> (-<<print (_gallery_count * 2)>>% Heat/night)<br> <</if>> <strong>🏦 Cayman Holding Bank:</strong> <<if $laundering_fronts.bank.owned is false>> <span style="color: #888;">Unowned.</span><br> <<else>> <span style="color: #00ffaa;">Operational (Lv. <<print $laundering_fronts.bank.level>>)</span> — <strong>Spots:</strong> <<print _bank_count>> / <<print $laundering_fronts.bank.capacity>> (-<<print (_bank_count * 3)>>% Heat/night)<br> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ff7777; margin-bottom: 10px;"> <h4>🏚️ Slums Trap House (Narcotics Stash & Crack Kitchen)</h4> <<if !$empire_properties || !$empire_properties.traphouse || ($empire_properties.traphouse.owned is false and $empire_properties.traphouse.rented is false)>> <span style="color: #888;">Status: Unowned (Browse off-grid sublets on NeonList Classifieds to rent or buy).</span> <<else>> <span style="color: #00ffaa;">Status: Operational <<if $empire_properties.traphouse.owned>>[Deed Owned — $200/wk tax]<<else>>[Leased — $500/wk rent]<</if>></span><br> <strong>Facilities:</strong> Kitchen Crack Stove, Supply Pantry, Floorboard Stash Safe.<br> <<link "🏚️ Visit Trap House">><<goto "Property_TrapHouse">><</link>> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #55ff55; margin-bottom: 10px;"> <h4>🏡 Suburban Grow House (Hydroponic Cultivation)</h4> <<if !$empire_properties || !$empire_properties.growhouse || ($empire_properties.growhouse.owned is false and $empire_properties.growhouse.rented is false)>> <span style="color: #888;">Status: Unowned (Lease for $2,000/wk or buy deed at Dynasty Real Estate Agency).</span> <<else>> <span style="color: #00ffaa;">Status: Operational <<if $empire_properties.growhouse.owned>>[Deed Owned — $600/wk tax]<<else>>[Leased — $2,000/wk rent]<</if>></span><br> <strong>Crop Status:</strong> <<if $grow_house.crop_active is false>> <span style="color: #888;">Empty (Awaiting seeds)</span> <<elseif $grow_house.ready is true>> <span style="color: #00ffaa; font-weight: bold;">HARVEST READY (<<print $grow_house.strain>>)</span> <<else>> <span style="color: #ffaa00;">Growing <<print $grow_house.strain>> (Needs <<print $grow_house.grow_days_needed>> days)</span> <</if>><br> <<link "🏡 Visit Grow House">><<goto "Property_GrowHouse">><</link>> <</if>> </div> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00e5ff; margin-bottom: 10px;"> <h4>🏭 Industrial Chemical Lab (Pill Press & Offshore Export)</h4> <<if !$empire_properties || !$empire_properties.chemlab || ($empire_properties.chemlab.owned is false and $empire_properties.chemlab.rented is false)>> <span style="color: #888;">Status: Unowned (Lease for $5,000/wk or buy deed on DarkNet Genesis Real Estate).</span> <<else>> <span style="color: #00ffaa;">Status: Operational <<if $empire_properties.chemlab.owned>>[Deed Owned — $1,200/wk tax]<<else>>[Leased — $5,000/wk rent]<</if>></span><br> <strong>Facilities:</strong> Rotary Ecstasy Pill Press, Drug Cutting Vats, Direct Dock Wholesale Loading Bay.<br> <<link "🏭 Visit Chemical Lab">><<goto "Property_ChemLab">><</link>> <</if>> </div> /* ======================================================= */ /* ONGLET : GANG */ /* ======================================================= */ <<elseif $current_empire_tab is "gang" or $current_empire_tab is "bodyguards">> <<set _totalUpkeep to 0>> <<set _bodyguardCount to 0>> <<for _j to 0; _j < $gang_members.length; _j++>> <<set _totalUpkeep += $gang_members[_j].upkeep>> <<if $gang_members[_j].assignment is "bodyguard">> <<set _bodyguardCount += 1>> <</if>> <</for>> <<if $current_empire_tab is "bodyguards">> <div style="background: rgba(255, 68, 68, 0.08); border: 1px solid #ff4444; border-left: 4px solid #ff4444; padding: 12px; border-radius: 6px; margin-bottom: 14px;"> <strong style="color: #ff4444; font-size: 1.05em;">🛡️ PERSONAL BODYGUARD SQUAD COMMAND</strong><br> <span style="font-size: 0.86em; color: #ccc;"> Your <strong>Personal Bodyguards</strong> accompany you into every <strong>Gunfight</strong> and <strong>Turf War Raid/Siege</strong> (they never intervene in 1v1 street melee fights). They inherit your <strong>Gang Armory Tier (Lv.<<print $gang_armory>>)</strong> by default, or you can manually buy higher-tier firearms and tactical outfits for each guard below! </span> </div> <<else>> <strong>Gang Roster, Bodyguard Squad & Security Assignments</strong><br> <span style="font-size: 0.85em; color: #aaa;"><em>Assign soldiers to <strong>🛡️ Personal Bodyguard</strong> to bring them into Gunfights and Turf War Raids/Sieges (they do not intervene in 1v1 melee fights). Bodyguards inherit your Gang Armory tier by default, or you can manually buy firearms and tactical outfits for them.</em></span> <br><br> <</if>> <span style="color: #ffaa00;"><strong>Daily Gang Upkeep:</strong> -$<<print _totalUpkeep>> / day</span> | <strong>Gang Armory Tier:</strong> <<print $gang_armory>> / 3 | <span style="color: #ff4444;"><strong>Personal Bodyguards Active:</strong> <<print _bodyguardCount>></span> <br><br> <<set _inhWepNames to ["Street Handgun (1.0x)", "Tactical SMG/Shotgun (1.35x)", "Combat Assault Rifle (1.70x)", "Military LMG (2.05x)"]>> <<set _inhArmNames to ["Street Clothes (0% Shield)", "Light Ballistic Vest (10% Shield)", "Combat Plate Carrier (15% Shield)", "Full Military Kevlar (20% Shield)"]>> <<set _bgWepCatalog to { "revolver": { name: ".38 Revolver", mult: 1.20, price: 1200 }, "pistol_9mm": { name: "9mm Glock", mult: 1.35, price: 2500 }, "shotgun": { name: "Pump Shotgun", mult: 1.85, price: 5000 }, "smg": { name: "MP5 SMG", mult: 1.80, price: 10000 }, "assault_rifle": { name: "Military Assault Rifle", mult: 2.25, price: 18000 } }>> <<set _bgArmorCatalog to { "biker_jacket": { name: "Reinforced Biker Leather", strBonus: 1, shield: 10, price: 1200, minRep: 4 }, "tactical_vest": { name: "Concealed Kevlar & Tactical Rig", strBonus: 1, shield: 18, price: 5000, minRep: 5 }, "enforcer_armor": { name: "Heavy Mercenary Exo-Coat", strBonus: 3, shield: 28, price: 28000, minRep: 10 }, "kingpin_suit": { name: "Armored Kingpin Pinstripe Suit", strBonus: 4, shield: 35, price: 45000, minRep: 12 } }>> <<if $gang_members.length is 0>> <em>Your gang is currently empty. Visit the Outskirts Bar or Neon Club to recruit muscle.</em> <<else>> <<for _i to 0; _i < $gang_members.length; _i++>> <<set _thug to $gang_members[_i]>> <<if _thug.custom_weapon is undefined>><<set _thug.custom_weapon to "inherited">><</if>> <<if _thug.custom_armor is undefined>><<set _thug.custom_armor to "inherited">><</if>> <<capture _i, _thug>> <<set _thugBorder to (_thug.assignment is "bodyguard" ? "#ff4444" : (_thug.specialty isnot "none" ? (_thug.type.includes("Elite") ? "#ffd700" : "#aa00ff") : "#555555"))>> <div @style="'background-color: #1a1a1a; padding: 12px; margin-bottom: 12px; border-radius: 5px; border-left: 4px solid ' + _thugBorder + ';'"> <div style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;"> <div> <strong><<print _thug.name>></strong> — <<print _thug.type>> <<if _thug.assignment is "bodyguard">> <span style="background: #ff4444; color: #fff; font-size: 0.72em; font-weight: bold; padding: 2px 6px; border-radius: 4px;">🛡️ PERSONAL BODYGUARD</span> <</if>> </div> <div style="font-size: 0.85em; color: #00aaff; text-transform: uppercase;"> Order: <strong><<print (_thug.assignment is "bodyguard" ? "PERSONAL BODYGUARD (BOSS SQUAD)" : _thug.assignment)>></strong> </div> </div> <<if _thug.specialty isnot "none">> <span style="color: #00ffaa; font-size: 0.9em;"><em>Specialty: <<print _thug.specialty>></em></span><br> <</if>> <<set _armBonusStr to (_thug.custom_armor isnot "inherited" and _bgArmorCatalog[_thug.custom_armor] ? _bgArmorCatalog[_thug.custom_armor].strBonus : 0)>> <strong>Strength:</strong> <<print _thug.strength>><<if _armBonusStr > 0>> <span style="color:#00ffaa;">(+<<print _armBonusStr>> Gear)</span><</if>>/10 | <strong>Loyalty:</strong> <<print _thug.loyalty>>/100 | <strong>Wage:</strong> -$<<print _thug.upkeep>>/day<br> /* Affichage de l'équipement (Hérité vs Manuel) */ <div style="background: #111; border: 1px solid #2e2e2e; padding: 8px 10px; border-radius: 4px; margin: 8px 0; font-size: 0.86em;"> <strong>🔫 Firearm:</strong> <<if _thug.custom_weapon is "inherited" or _bgWepCatalog[_thug.custom_weapon] is undefined>> <span style="color: #ccc;">Inherited from Gang Armory — <<print _inhWepNames[$gang_armory]>></span> <<else>> <span style="color: #ffaa00;"><strong><<print _bgWepCatalog[_thug.custom_weapon].name>> (<<print _bgWepCatalog[_thug.custom_weapon].mult>>x Firepower)</strong></span> <<if (1 + $gang_armory * 0.35) > _bgWepCatalog[_thug.custom_weapon].mult>> <span style="color: #00ffaa; font-size: 0.85em;"> (Using higher Gang Armory <<print (1 + $gang_armory * 0.35)>>x!)</span> <</if>> <</if>> <br> <strong>🛡️ Armor / Outfit:</strong> <<if _thug.custom_armor is "inherited" or _bgArmorCatalog[_thug.custom_armor] is undefined>> <span style="color: #ccc;">Inherited from Gang Armory — <<print _inhArmNames[$gang_armory]>></span> <<else>> <span style="color: #00e5ff;"><strong><<print _bgArmorCatalog[_thug.custom_armor].name>> (+<<print _bgArmorCatalog[_thug.custom_armor].strBonus>> Str, <<print _bgArmorCatalog[_thug.custom_armor].shield>>% Shield)</strong></span> <</if>> </div> <strong>Issue Assignment (Job):</strong><br> <<if _thug.assignment is "bodyguard">> <span style="color: #00ffaa; font-weight: bold; background: rgba(0,255,170,0.12); border: 1px solid #00ffaa; padding: 1px 6px; border-radius: 4px;">[ ✔ 🛡️ Personal Bodyguard (ACTIVE) ]</span> <<else>> <<link "[ 🛡️ Assign as Personal Bodyguard ]">><<set $gang_members[_i].assignment to "bodyguard">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if _thug.assignment is "war">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ ⚔️ War / Escort ]</span> <<else>> <<link "[ ⚔️ War / Escort ]">><<set $gang_members[_i].assignment to "war">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if _thug.assignment is "idle">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ Standby (Hideout) ]</span> <<else>> <<link "[ Standby (Hideout) ]">><<set $gang_members[_i].assignment to "idle">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if _thug.assignment is "street">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ Street Protection ]</span> <<else>> <<link "[ Street Protection ]">><<set $gang_members[_i].assignment to "street">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if _thug.assignment is "basement">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ Guard Basement ]</span> <<else>> <<link "[ Guard Basement ]">><<set $gang_members[_i].assignment to "basement">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if $empire_properties.hangar.owned is true>> <<if _thug.assignment is "hangar">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ Protect Hangar ]</span> <<else>> <<link "[ Protect Hangar ]">><<set $gang_members[_i].assignment to "hangar">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if _thug.assignment is "scout">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ 🔭 Scout Enemy Turf ]</span> <<else>> <<link "[ 🔭 Scout Enemy Turf ]">><<set $gang_members[_i].assignment to "scout">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if _thug.assignment is "defend_turf">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ 🛡️ Defend Stashes/Turf ]</span> <<else>> <<link "[ 🛡️ Defend Stashes/Turf ]">><<set $gang_members[_i].assignment to "defend_turf">><<goto "Phone_EmpireApp">><</link>> <</if>> <<if $empire_properties && $empire_properties.traphouse && ($empire_properties.traphouse.owned is true or $empire_properties.traphouse.rented is true)>> <<if _thug.assignment is "traphouse">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ 🏚️ Guard Trap House ]</span> <<else>> <<link "[ 🏚️ Guard Trap House ]">><<set $gang_members[_i].assignment to "traphouse">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if $empire_properties && $empire_properties.growhouse && ($empire_properties.growhouse.owned is true or $empire_properties.growhouse.rented is true)>> <<if _thug.assignment is "growhouse">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ 🌿 Tend Grow House ]</span> <<else>> <<link "[ 🌿 Tend Grow House ]">><<set $gang_members[_i].assignment to "growhouse">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> <<if $empire_properties && $empire_properties.chemlab && ($empire_properties.chemlab.owned is true or $empire_properties.chemlab.rented is true)>> <<if _thug.assignment is "chemlab">> <span style="color: #00ffaa; font-weight: bold;">[ ✔ 🏭 Secure Chem Lab ]</span> <<else>> <<link "[ 🏭 Secure Chem Lab ]">><<set $gang_members[_i].assignment to "chemlab">><<goto "Phone_EmpireApp">><</link>> <</if>> <</if>> /* ACHAT MANUEL D'ÉQUIPEMENT POUR LES GARDES DU CORPS */ <<if _thug.assignment is "bodyguard">> <div style="border-top: 1px dashed #444; margin-top: 10px; padding-top: 8px; font-size: 0.84em; background: #141418; padding: 8px; border-radius: 4px;"> <strong style="color: #ffaa00;">🧰 Manual Bodyguard Loadout Shop (Wallet: $<<print $money>>):</strong><br> <<set _curWepMult to (_thug.custom_weapon isnot "inherited" and _bgWepCatalog[_thug.custom_weapon] ? _bgWepCatalog[_thug.custom_weapon].mult : 1.0)>> <span style="color: #aaa;"><strong>Firearms:</strong></span> <<if $email_armory_low_read is true or $armory_low_unlocked is true>> <<if _thug.custom_weapon is "revolver">> <span style="color:#00ffaa;">[ ✔ .38 Revolver ]</span> <<elseif _curWepMult < 1.20>> <<if $money >= 1200>> <<link "[ Buy .38 Revolver ($1,200 — 1.20x) ]">><<set $money -= 1200>><<set $gang_members[_i].custom_weapon to "revolver">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ .38 Revolver ($1,200) ]</span> <</if>> <</if>> <<else>> <span style="color:#666;">[ 🔒 Tier 1 Gun: Unlock Ironclad Surplus ]</span> <</if>> <<if $email_armory_high_read is true or $armory_high_unlocked is true>> <<if _thug.custom_weapon is "pistol_9mm">> <span style="color:#00ffaa;">[ ✔ 9mm Glock ]</span> <<elseif _curWepMult < 1.35>> <<if $money >= 2500>> <<link "[ Buy 9mm Glock ($2,500 — 1.35x) ]">><<set $money -= 2500>><<set $gang_members[_i].custom_weapon to "pistol_9mm">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ 9mm Glock ($2,500) ]</span> <</if>> <</if>> <<if _thug.custom_weapon is "shotgun">> <span style="color:#00ffaa;">[ ✔ Pump Shotgun ]</span> <<elseif _curWepMult < 1.85>> <<if $money >= 5000>> <<link "[ Buy Pump Shotgun ($5,000 — 1.85x) ]">><<set $money -= 5000>><<set $gang_members[_i].custom_weapon to "shotgun">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ Pump Shotgun ($5,000) ]</span> <</if>> <</if>> <<if _thug.custom_weapon is "smg">> <span style="color:#00ffaa;">[ ✔ MP5 SMG ]</span> <<elseif _curWepMult < 1.80>> <<if $money >= 10000>> <<link "[ Buy MP5 SMG ($10,000 — 1.80x) ]">><<set $money -= 10000>><<set $gang_members[_i].custom_weapon to "smg">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ MP5 SMG ($10,000) ]</span> <</if>> <</if>> <<if _thug.custom_weapon is "assault_rifle">> <span style="color:#00ffaa;">[ ✔ Military Assault Rifle (MAX) ]</span> <<elseif _curWepMult < 2.25>> <<if $money >= 18000>> <<link "[ Buy Military Assault Rifle ($18,000 — 2.25x) ]">><<set $money -= 18000>><<set $gang_members[_i].custom_weapon to "assault_rifle">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ Military Assault Rifle ($18,000) ]</span> <</if>> <</if>> <<else>> <span style="color:#666;">[ 🔒 Heavy Guns: Unlock Vanguard Armory (Rep Lv.7) ]</span> <</if>> <br> /* Armures/Tenues débloquées selon la Réputation du Boss ou les tenues possédées */ <<set _curArmShield to (_thug.custom_armor isnot "inherited" and _bgArmorCatalog[_thug.custom_armor] ? _bgArmorCatalog[_thug.custom_armor].shield : 0)>> <span style="color: #aaa;"><strong>Tactical Outfits:</strong></span> <<if $rep_level >= 4 or $inventory.outfits.includes("biker_jacket")>> <<if _thug.custom_armor is "biker_jacket">> <span style="color:#00e5ff;">[ ✔ Biker Leather ]</span> <<elseif _curArmShield < 10>> <<if $money >= 1200>> <<link "[ Buy Biker Leather ($1,200 — +1 Str, 10% Shield) ]">><<set $money -= 1200>><<set $gang_members[_i].custom_armor to "biker_jacket">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ Biker Leather ($1,200) ]</span> <</if>> <</if>> <<else>> <span style="color:#666;">[ 🔒 Biker Leather (Rep Lv.4) ]</span> <</if>> <<if $rep_level >= 5 or $inventory.outfits.includes("tactical_vest")>> <<if _thug.custom_armor is "tactical_vest">> <span style="color:#00e5ff;">[ ✔ Kevlar Tactical Rig ]</span> <<elseif _curArmShield < 18>> <<if $money >= 5000>> <<link "[ Buy Kevlar Rig ($5,000 — +1 Str, 18% Shield) ]">><<set $money -= 5000>><<set $gang_members[_i].custom_armor to "tactical_vest">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ Kevlar Rig ($5,000) ]</span> <</if>> <</if>> <<else>> <span style="color:#666;">[ 🔒 Kevlar Rig (Rep Lv.5) ]</span> <</if>> <<if $rep_level >= 10 or $inventory.outfits.includes("enforcer_armor")>> <<if _thug.custom_armor is "enforcer_armor">> <span style="color:#00e5ff;">[ ✔ Mercenary Exo-Coat ]</span> <<elseif _curArmShield < 28>> <<if $money >= 28000>> <<link "[ Buy Exo-Coat ($28,000 — +3 Str, 28% Shield) ]">><<set $money -= 28000>><<set $gang_members[_i].custom_armor to "enforcer_armor">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ Exo-Coat ($28,000) ]</span> <</if>> <</if>> <<else>> <span style="color:#666;">[ 🔒 Exo-Coat (Rep Lv.10) ]</span> <</if>> <<if $rep_level >= 12 or $inventory.outfits.includes("kingpin_suit")>> <<if _thug.custom_armor is "kingpin_suit">> <span style="color:#00e5ff;">[ ✔ Armored Kingpin Suit (MAX) ]</span> <<elseif _curArmShield < 35>> <<if $money >= 45000>> <<link "[ Buy Armored Kingpin Suit ($45,000 — +4 Str, 35% Shield) ]">><<set $money -= 45000>><<set $gang_members[_i].custom_armor to "kingpin_suit">><<goto "Phone_EmpireApp">><</link>> <<else>> <span style="color:#777;">[ Armored Kingpin Suit ($45,000) ]</span> <</if>> <</if>> <<else>> <span style="color:#666;">[ 🔒 Kingpin Suit (Rep Lv.12) ]</span> <</if>> </div> <</if>> <div style="text-align: right; margin-top: 6px;"> <<link "Fire " + _thug.name>> <<run $gang_members.deleteAt(_i)>> <<goto "Phone_EmpireApp">> <</link>> </div> </div> <</capture>> <</for>> <</if>> /* ======================================================= */ /* ONGLET : GUERRE DE TERRITOIRES */ /* ======================================================= */ <<elseif $current_empire_tab is "turf">> <<if $war_state.last_raid_day is undefined>><<set $war_state.last_raid_day to -1>><</if>> <<if $war_state.last_sabotage_day is undefined>><<set $war_state.last_sabotage_day to -1>><</if>> <<if $war_op_log is undefined>><<set $war_op_log to "">><</if>> <<set _warCurDay to Math.floor(($time - 240) / 1440)>> /* Vérification des spécialistes et de la défense du gang */ <<set _warHasHacker to false, _warHasSmuggler to false, _warHasDriver to false, _warHasFixer to false, _warHasCaptain to false>> <<set _warTurfDefPower to 0, _warEscortCount to 0, _warScoutCount to 0>> <<for _wg to 0; _wg < $gang_members.length; _wg++>> <<set _wm to $gang_members[_wg]>> <<if _wm.specialty is "Hacker">><<set _warHasHacker to true>><</if>> <<if _wm.specialty is "Smuggler">><<set _warHasSmuggler to true>><</if>> <<if _wm.specialty is "Driver">><<set _warHasDriver to true>><</if>> <<if _wm.specialty is "Corrupt Ex-Cop">><<set _warHasFixer to true>><</if>> <<if _wm.specialty is "Street Captain">><<set _warHasCaptain to true>><</if>> <<if _wm.assignment is "defend_turf">><<set _warTurfDefPower += _wm.strength>><</if>> <<if _wm.assignment is "bodyguard" or _wm.assignment is "war">><<set _warEscortCount += 1>><</if>> <<if _wm.assignment is "scout">><<set _warScoutCount += 1>><</if>> <</for>> <h4>⚔️ City Turf Control & Syndicate Warfare</h4> <<if $war_op_log isnot "">> <div style="background-color: #162219; border-left: 4px solid #00ffaa; padding: 12px; margin-bottom: 15px; border-radius: 4px;"> $war_op_log </div> <<set $war_op_log to "">> <</if>> <<if $war_state.active is true and $war_state.target_district isnot "none">> <<set _actDist to $war_state.target_district>> <<set _actFac to $factions[_actDist]>> <<set _reqDefPower to Math.max(8, Math.floor(_actFac.max_defense / 12))>> <div style="background-color: #2b0f0f; border: 2px solid #ff4444; padding: 14px; margin-bottom: 16px; border-radius: 6px;"> <strong>🔥 ACTIVE WAR FRONT:</strong> Targeting <strong><<print _actFac.name>></strong> (<<print _actDist>>)<br> <div style="font-size: 0.88em; color: #ddd; margin-top: 6px; line-height: 1.5;"> • <strong>Street Ambush Risk:</strong> <span style="color: #ffaa00;"><<print $war_state.ambush_chance>>%</span> when traveling<br> • <strong>Enemy Supply Depot:</strong> <<if _actFac.supply_sabotaged is true>><span style="color: #00e5ff;"><strong>🔥 SABOTAGED</strong> (0 nightly reinforcements, -15% enemy combat stats)</span><<else>><span style="color: #ff6666;"><strong>ACTIVE</strong> (+6 to +14 Enemy Defense reinforced every night)</span><</if>><br> • <strong>Inside Informant:</strong> <<if _actFac.informant_turned is true>><span style="color: #00ffaa;"><strong>👁️ FLIPPED</strong> (15% Ambush Risk, Heavy Cover & -10% Enemy HP in raids)</span><<else>><span style="color: #aaa;">None (Bribe an informant to expose enemy patrols & weak points)</span><</if>><br> • <strong>Your Turf Defense Power:</strong> <strong style="color: <<print (_warTurfDefPower >= _reqDefPower ? '#00ffaa' : '#ff4444')>>;"><<print _warTurfDefPower>> / <<print _reqDefPower>> required</strong> | <strong>Active Scouts:</strong> <<print _warScoutCount>> | <strong>Strike Squad:</strong> <<print _warEscortCount>> </div> <br> <<if $money >= 5000>> <<link "[ 🏳️ Negotiate Ceasefire ($5,000 Tribute) ]">> <<set $money -= 5000>> <<set $war_state.active to false>> <<set $war_state.target_district to "none">> <<set $war_state.ambush_chance to 35>> <<goto "Phone_EmpireApp">> <</link>> <</if>> </div> <<else>> <em>No active Turf War. Select a rival faction below to declare war. Rival syndicates reinforce their turf every night unless sabotaged, and you must wear their defense down to <strong>≤ 30%</strong> before breaching their stronghold.</em><br><br> <</if>> <<set _districts to ["Projects", "Slums", "Outskirts", "Port", "Neon", "Financial"]>> <<set _defaultMaxDefs to { "Projects": 80, "Slums": 120, "Outskirts": 160, "Port": 210, "Neon": 260, "Financial": 320 }>> <<for _d to 0; _d < _districts.length; _d++>> <<set _dist to _districts[_d]>> <<set _fac to $factions[_dist]>> <<if _fac.max_defense < _defaultMaxDefs[_dist]>> <<if _fac.conquered isnot true>><<set _fac.defense += (_defaultMaxDefs[_dist] - _fac.max_defense)>><</if>> <<set _fac.max_defense to _defaultMaxDefs[_dist]>> <</if>> <<if _fac.supply_sabotaged is undefined>><<set _fac.supply_sabotaged to false>><</if>> <<if _fac.informant_turned is undefined>><<set _fac.informant_turned to false>><</if>> <<capture _dist, _fac>> <div style="background-color: #1a1a1a; padding: 14px; margin-bottom: 14px; border-radius: 6px; border-left: 4px solid <<print (_fac.conquered ? '#00ffaa' : '#ff4444')>>;"> <strong><<print _dist>></strong> — <strong><<print _fac.name>></strong> (Boss: <<print _fac.boss>>)<br> <<if _fac.conquered is true>> <span style="color: #00ffaa;"><strong>[ CONQUERED — 100% Control | Daily Tribute: +$<<print _fac.tribute>>/day ]</strong></span> <<else>> <<set _defPct to Math.floor((_fac.defense / _fac.max_defense) * 100)>> <<set _siegeThreshold to Math.ceil(_fac.max_defense * 0.30)>> <strong>Enemy Defense Rating:</strong> <span style="color: #ffaa00;"><<print _fac.defense>> / <<print _fac.max_defense>> (<<print _defPct>>%)</span> | <strong>Siege Vulnerability Threshold:</strong> <span style="color: #00e5ff;">≤ <<print _siegeThreshold>> Def (30%)</span> | <strong>Tribute:</strong> +$<<print _fac.tribute>>/day<br> /* Jauge visuelle de défense ennemie avec repère à 30% */ <div style="position: relative; background-color: #111; border: 1px solid #444; height: 12px; width: 100%; margin: 8px 0; border-radius: 4px; overflow: hidden;"> <div @style="'background: linear-gradient(90deg, #ff8800, #ff3333); height: 100%; width: ' + _defPct + '%;'"></div> <div style="position: absolute; left: 30%; top: 0; bottom: 0; width: 2px; background: #00e5ff;" title="30% Siege Threshold"></div> </div> <<if $war_state.active is false>> <<link `"[ 🔥 Declare War on " + _fac.name + " ]"`>> <<set $war_state.active to true>> <<set $war_state.target_district to _dist>> <<set $war_state.ambush_chance to ($factions[_dist].informant_turned ? 15 : 35)>> <<goto "Phone_EmpireApp">> <</link>> <<elseif $war_state.target_district is _dist>> /* SECTION 1 : OFFENSIVE DIRECTE (1 RAID OU SIÈGE PAR JOUR) */ <div style="background-color: #121212; border: 1px solid #333; padding: 10px; border-radius: 5px; margin-top: 8px;"> <strong style="color: #ff6666; font-size: 0.9em; text-transform: uppercase;">⚔️ Direct Strike Operations (Max 1 Raid/Siege Per Day):</strong><br> <<if _warCurDay <= $war_state.last_raid_day>> <span style="color: #888; font-size: 0.88em;"><em>⏳ Your strike team has already executed a major raid today. Rest and regroup until tomorrow.</em></span> <<else>> <<if $stamina >= 35>> <<link "[ 🔥 Launch 3-Wave Outpost Raid (-28 to -48 Def, 35 Stamina, 90m) ]">> <<set _oldTime to $time>> <<set $stamina -= 35>> <<set $time += 90>> <<set $war_state.last_raid_day to _warCurDay>> <<set $assault_district to _dist>> <<set $war_state.raid_wave to 1>> <<set $raid_wave_in_progress to false>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "War_Raid_Hub">> <</if>> <</link>> <<else>> <span style="color: #777; font-size: 0.88em;">[ Outpost Raid: Requires 35 Stamina ]</span> <</if>> <br> <<if _fac.defense <= _siegeThreshold>> <<if $stamina >= 40>> <<link `"[ 🏰 LAUNCH 3-STAGE STRONGHOLD SIEGE ON " + _fac.name.toUpperCase() + " (40 Stamina, 2 hrs) ]"`>> <<set _oldTime to $time>> <<set $stamina -= 40>> <<set $time += 120>> <<set $war_state.last_raid_day to _warCurDay>> <<set $assault_district to _dist>> <<set $war_state.assault_stage to 1>> <<set $assault_stage_in_progress to false>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "War_Assault_Start">> <</if>> <</link>> <<else>> <span style="color: #ffaa00; font-size: 0.88em;">[ Stronghold Siege Unlocked — Requires 40 Stamina ]</span> <</if>> <<else>> <span style="color: #888; font-size: 0.85em;">🔒 <em>Final Stronghold Siege locked: Reduce Enemy Defense to <strong><<print _siegeThreshold>> or lower</strong> first (Currently <<print _fac.defense>>).</em></span> <</if>> <</if>> </div> /* SECTION 2 : SABOTAGE & OPÉRATIONS COUVERTES (1 OPÉRATION PAR JOUR) */ <div style="background-color: #121212; border: 1px solid #333; padding: 10px; border-radius: 5px; margin-top: 8px;"> <strong style="color: #00e5ff; font-size: 0.9em; text-transform: uppercase;">🕵️ Covert Sabotage & Spec-Ops (Max 1 Op Per Day — 25 Stamina, 60m):</strong><br> <<if _warCurDay <= $war_state.last_sabotage_day>> <span style="color: #888; font-size: 0.88em;"><em>⏳ Covert operation already completed today. Enemy lookouts are on high alert until tomorrow.</em></span> <<elseif $stamina < 25>> <span style="color: #777; font-size: 0.88em;"><em>Requires 25 Stamina to execute a covert operation.</em></span> <<else>> /* 1. SABOTAGE DU DÉPÔT LOGISTIQUE */ <<if $money >= 500>> <<link "[ 💣 Bomb Supply Depot ($500 Thermite, Intelligence Check) ]">> <<set _oldTime to $time>><<set $time += 60>><<set $stamina -= 25>><<set $money -= 500>> <<set $war_state.last_sabotage_day to _warCurDay>> <<set _dc to 11 + Math.floor(_fac.max_defense / 60)>> <<set _specBonus to ((_warHasHacker or _warHasSmuggler) ? 3 : 0)>> <<set _roll to random(1, 10) + $intelligence + _specBonus>> <<if _roll >= _dc>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - 22)>> <<set $factions[_dist].supply_sabotaged to true>> <<addXP 40>> <<set $war_op_log to "<span style='color:#00ffaa;'><strong>💥 Supply Depot Destroyed!</strong></span> Your thermite charges leveled " + _fac.name + "'s munitions cache (<strong>-22 Enemy Defense</strong>, nightly reinforcements halted, and enemy combat power reduced by 15%).">> <<else>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - 8)>> <<addHeat 3>> <<set $war_op_log to "<span style='color:#ffaa00;'><strong>Partial Detonation:</strong></span> Enemy sentries spotted you before you could reach the main vault. You detonated the charges on the outer wall (<strong>-8 Enemy Defense</strong>, +3% Heat).">> <</if>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Phone_EmpireApp">><</if>> <</link>><br> <<else>> <span style="color: #666; font-size: 0.85em;">[ Bomb Supply Depot: Needs $500 for Thermite ]</span><br> <</if>> /* 2. CORROMPRE UN INFORMATEUR INTERNE */ <<if $money >= 1000 and _fac.informant_turned isnot true>> <<link "[ 🕵️ Flip Inside Informant ($1,000 Bribe, Charisma Check) ]">> <<set _oldTime to $time>><<set $time += 60>><<set $stamina -= 25>><<set $money -= 1000>> <<set $war_state.last_sabotage_day to _warCurDay>> <<set _dc to 11 + Math.floor(_fac.max_defense / 60)>> <<set _specBonus to ((_warHasFixer or _warHasCaptain) ? 3 : 0)>> <<set _roll to random(1, 10) + $charisma + _specBonus>> <<if _roll >= _dc>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - 18)>> <<set $factions[_dist].informant_turned to true>> <<set $war_state.ambush_chance to 15>> <<addXP 40>> <<set $war_op_log to "<span style='color:#00ffaa;'><strong>👁️ Informant Flipped!</strong></span> A disillusioned " + _fac.name + " lieutenant accepted your envelope, handing over patrol schedules and safe codes (<strong>-18 Enemy Defense</strong>, Ambush Risk cut to 15%, and Heavy Cover granted in raids!).">> <<else>> <<set $money += 500>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - 6)>> <<set $war_op_log to "<span style='color:#ffaa00;'><strong>Informant Spooked:</strong></span> The contact got cold feet halfway through the meet. You kept half the bribe ($500) and still gleaned minor patrol intel (<strong>-6 Enemy Defense</strong>).">> <</if>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Phone_EmpireApp">><</if>> <</link>><br> <</if>> /* 3. DRIVE-BY HIT & RUN */ <<if $active_vehicle isnot "none" and $active_firearm isnot "none" and $inventory.ammo >= 6>> <<link `"[ 🚗 Drive-By Hit & Run (" + $active_vehicle + " + 6 Ammo) ]"`>> <<set _oldTime to $time>><<set $time += 60>><<set $stamina -= 25>> <<set $inventory.ammo -= 6>> <<set $war_state.last_sabotage_day to _warCurDay>> <<addHeat 3>> <<set _driveDrop to 20 + (_warHasDriver ? 8 : 0) + (["Armored SUV", "Utility Van", "Hypercar", "Sports Car", "Viper"].includes($active_vehicle) ? 5 : 0)>> <<set _driveLoot to random(400, 900)>> <<set $money += _driveLoot>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - _driveDrop)>> <<addXP 45>> <<set $war_op_log to "<span style='color:#00ffaa;'><strong>🚗 Drive-By Blitz!</strong></span> You tore past " + _fac.name + "'s street corners in your <strong>" + $active_vehicle + "</strong>, spraying their lookouts and snatching dropped cash bags (<strong>-" + _driveDrop + " Enemy Defense</strong>, <strong>+$" + _driveLoot + "</strong>, +3% Heat).">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Phone_EmpireApp">><</if>> <</link>><br> <<else>> <span style="color: #666; font-size: 0.85em;">[ Drive-By Hit & Run: Requires Active Vehicle, Equipped Firearm & 6+ Reserve Ammo ]</span><br> <</if>> /* 4. EMPOISONNER LE RÉSEAU DE DISTRIBUTION ENNEMI */ <<if $inventory.cocaine >= 2 or $inventory.heroin >= 2>> <<link "[ 🧪 Spike Enemy Narcotics Supply (Costs 2x Cocaine or Heroin) ]">> <<set _oldTime to $time>><<set $time += 60>><<set $stamina -= 25>> <<if $inventory.heroin >= 2>> <<set $inventory.heroin -= 2>> <<else>> <<set $inventory.cocaine -= 2>> <</if>> <<set $war_state.last_sabotage_day to _warCurDay>> <<set $factions[_dist].defense to Math.max(0, $factions[_dist].defense - 26)>> <<set _stolenClients to random(1100, 2100)>> <<set $money += _stolenClients>> <<addXP 45>> <<set $war_op_log to "<span style='color:#00ffaa;'><strong>🧪 Chemical Sabotage!</strong></span> You slipped spiked packages into " + _fac.name + "'s street distribution network. Hospitalizations and infighting crippled their crews (<strong>-26 Enemy Defense</strong>) while panicked buyers flocked to your dealers (<strong>+$" + _stolenClients + "</strong>)!">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>><<goto "Pass_Out">><<else>><<goto "Phone_EmpireApp">><</if>> <</link>> <<else>> <span style="color: #666; font-size: 0.85em;">[ Spike Enemy Supply: Requires 2x Cocaine or 2x Heroin in Inventory ]</span> <</if>> <</if>> </div> <</if>> <</if>> </div> <</capture>> <</for>> <</if>> <br>---<br> <</nobr>>
<h3>LoverBoy - Escort Services</h3> Your profile is currently: <span style="color: #00ffaa;"><strong>Active</strong></span> <br> <strong>Total Clients Satisfied:</strong> $counters.escort_clients <br><br> <<if $escort_requests.length is 0>> <em>Your inbox is empty today.</em><br><br> <<else>> <strong>Pending Requests:</strong><br><br> <<for _i to 0; _i < $escort_requests.length; _i++>> <<set _req to $escort_requests[_i]>> <<capture _i, _req>> <div style="position: relative; overflow: hidden; background-color: #1a1a1a; padding: 10px; border-left: 3px solid #ff44aa; margin-bottom: 10px; border-radius: 5px;"> /* 1. Génération de l'image de fond via le nouveau widget */ /* On va par exemple chercher dans le dossier "TEASE" de l'ethnie correspondante */ <<set _chemin_fond to "images/sex/work/text/" + _req.race + "/">> <<randomBackground _chemin_fond 4>> /* 2. Contenu du texte (z-index: 2 le force à s'afficher au-dessus de l'image) */ <div style="position: relative; z-index: 2; text-shadow: 1px 1px 2px black;"> <strong>Client:</strong> <<print _req.race.toLocaleUpperCase()>><br> <strong>Demand:</strong> Must last at least <<print _req.duration>> minutes.<br> <strong>Preferences:</strong> Enjoys <em><<print _req.favorite_action.name>></em>, prefers a <em><<print _req.favorite_finish.name>></em> finish.<br> <strong>Payout:</strong> <strong style="color: #00ffaa;">$<<print _req.payout>></strong><br><br> <<link "Accept Booking & Go to Client">> <<set $escort_job to true>> <<set $escort_time_required to _req.duration>> <<set $escort_time_spent to 0>> <<set $escort_payout to _req.payout>> <<set $escort_pref_action to _req.favorite_action.id>> <<set $escort_pref_finish to _req.favorite_finish.id>> <<set $escort_pref_action_done to false>> <<set $sex_eth to _req.race>> <<set $sex_action to "TEASE">> <<set $sex_log to "You arrive at the client's hotel room. She is waiting for you, expecting to get her money's worth.">> <<run $escort_requests.deleteAt(_i)>> <<goto "Sex_Main">> <</link>> </div> </div> <</capture>> <</for>> <</if>> <br>---<br> <<link "Back to Home Screen">><<goto "Phone_Main">><</link>>
<h3>Smartphone OS</h3> The screen glows brightly. It's brand new and incredibly fast. --- <strong>Apps:</strong><br><br> <<button "💋 LoverBoy App ($escort_requests.length)">><<goto "Phone_EscortApp">><</button>> <br><br> <<button "👑 Empire Management">><<goto "Phone_EmpireApp">><</button>> <br><br> <<button "🛡️ Bodyguard Squad & Gang">><<set $current_empire_tab to "bodyguards">><<goto "Phone_EmpireApp">><</button>> <br><br> --- <<link "Put the phone away">> <<if $menu_return_passage isnot undefined and $menu_return_passage isnot "" and !["War_Raid_Hub", "War_Assault_Start", "War_Assault_Win", "Gunfight_Main", "Gunfight_Turn", "Combat_Main", "Combat_Turn", "Combat_Win", "Combat_Lose"].includes($menu_return_passage)>> <<goto $menu_return_passage>> <<else>> <<set $menu_return_passage to $current_location>> <<goto $current_location>> <</if>> <</link>>
<h3>The Underground Cellar</h3> You walk down a narrow, hidden flight of concrete stairs beneath a condemned building block. You push open a heavy steel door that clicks shut solidly behind you. <<nobr>> <<set _maxCapacity to ($basement_level is 1 ? 3 : 20)>> <<if $basement_level is 1>> It's cold, damp, and the thick walls absorb all sound. <<elseif $basement_level is 2>> <div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/Sex/work/basement2.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> The recent excavations have turned this cellar into a sprawling underground bunker. <</if>> --- <strong>Cellar Occupancy:</strong> $basement_captives.length / _maxCapacity cells occupied. --- <br> <<if $basement_captives.length > 0>> <strong>Your Captives:</strong><br><br> <<for _i to 0; _i < $basement_captives.length; _i++>> <<capture _i>> <<link $basement_captives[_i].name>> <<set $current_captive to _i>> <<set $cell_log to "">> /* Choix de l'image d'attente selon qu'elle est attachée ou non */ <<if $basement_captives[_i].tied is true>> <<set $cell_action to "idle_b">> <<else>> <<set $cell_action to "idle">> <</if>> <<goto "Basement_Cell">> <</link>> - Discipline: $basement_captives[_i].discipline% <<if $basement_captives[_i].tied>> (Tied up)<<else>> (Untied)<</if>><br> <</capture>> <</for>> <<else>> <em>The holding cells are currently empty.</em> <</if>> <br><br> --- <<link "Head back upstairs to your apartment">> <<goto "Home">> <</link>> <</nobr>>
<h3>The Garage</h3> You unlock the heavy industrial padlock and roll up the metal door. The air inside smells of dust and old motor oil. It's completely secluded from the main street. <<nobr>> <<if $garage_level is 1>> The space is decent. It's large enough to safely hide a vehicle or two, away from prying eyes. For now, it echoes with emptiness. <<elseif $garage_level is 2>> The expanded warehouse is massive. The contractors really opened up the floor plan. You could easily store a whole fleet of cars in here, or set up a real chop shop operation. <</if>> <br><br> /* ======================================================= */ /* SECTION 1 : FLOTTE PERSONNELLE */ /* ======================================================= */ <h3>Personal Fleet</h3> <strong>Current Ride:</strong> <<if $active_vehicle is "none" or $active_vehicle is undefined>> <span style="color: #ffaa00;">None (Walking / Public Transport)</span> <<else>> <span style="color: #00ffaa;"><<print $active_vehicle>></span> <</if>> <br><br> <<if $owned_vehicles.length is 0>> <em>You don't own any legal vehicles yet. Visit the dealership to buy one.</em> <<else>> <<for _i to 0; _i < $owned_vehicles.length; _i++>> <<set _car to $owned_vehicles[_i]>> <<capture _car>> <div style="background-color: #1a1a1a; padding: 10px; border-left: 3px solid #00aaff; margin-bottom: 10px;"> <strong><<print _car>></strong> <span style="float: right;"> <<if $active_vehicle is _car>> <span style="color: #00ffaa;">[ ACTIVE ]</span> <<else>> <<link "[ Set as Active ]">> <<set $active_vehicle to _car>> <<goto "Player_Garage">> /* Recharge la page pour mettre à jour l'affichage */ <</link>> <</if>> </span> <div style="clear: both;"></div> </div> <</capture>> <</for>> <</if>> <br><hr style="border-color: #444;"><br> /* ======================================================= */ /* SECTION 2 : VÉHICULES VOLÉS */ /* ======================================================= */ <h3>Stolen Inventory (Chop Shop Stock)</h3> /* --- CALCUL DE LA CAPACITÉ --- */ <<set _maxCapacity to $garage_level * 2>> <strong>Capacity:</strong> $stolen_vehicles.length / _maxCapacity spaces filled. <br><br> /* --- AFFICHAGE DE L'INVENTAIRE --- */ <<if $stolen_vehicles.length is 0>> <em>Your chop shop stock is currently empty. Head out at night to score some rides.</em> <<else>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 3px solid #ff4444;"> <<for _i to 0; _i < $stolen_vehicles.length; _i++>> <strong>Slot <<print _i + 1>>:</strong> <<print $stolen_vehicles[_i]>> <br> <</for>> </div> <br> <span style="color: #888;"><em>// Vehicles can be sold at the Chop Shop (Slums) or exported via Dark Web Cartel contracts. //</em></span> <</if>> <br><br> <</nobr>> --- <<link "Lock up and return to your apartment">> <<goto "Home">> <</link>>
<h3>Neon Hotel - Your Room</h3> You are in your rented hotel room. The door is locked, the AC is running, and it smells like cheap lavender cleaner. It's a perfect safehouse for the day. <<if $room_result isnot "">> $room_result <br>---<br> <</if>> <strong>Stamina:</strong> $stamina | <strong>Wallet:</strong> $ $money --- <strong>Room Amenities:</strong><br><br> <<if $hotel_shower_used is false>> <<link "Take a shower (Takes 30 mins, Restores 30 Stamina)">> <<set $hotel_shower_used to true>> <<set _oldTime to $time>> <<set $time += 30>> /* Restauration de l'énergie avec respect de la limite maximum */ <<set $stamina to Math.min($stamina + 30, $maxstamina)>> <<set $room_result to "You take a long, hot shower. The grime of the city washes down the drain. You feel refreshed.">> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Player_Hotel_Room">> <</if>> <</link>><br> <<else>> //The towels are wet. You've already showered.//<br> <</if>> [[Call an Escort ($100)|Hotel_Escort_Menu]]<br><br> <strong>Hotel Activities:</strong><br><br> [[Prowl the hallways to rob other rooms|Hotel_Hallway]]<br><br> --- <<link "Go to sleep (Advances to next day, Restores 100% HP)">> /* Le sommeil annule la location pour le lendemain */ <<set $has_hotel_room to false>> <<set _next5AM to (Math.floor($time / 1440) * 1440) + 1740>> <<set _sleepDuration to Math.max(480, _next5AM - $time)>> <<set $time += _sleepDuration>> <<set _hpRegen to $maxhp - $hp>> <<set $hp to $maxhp>> <<if _hpRegen > 0>> <<run $morning_notifications.unshift("<em>The luxury hotel bed did wonders for your broken body. You recovered " + _hpRegen + " HP.</em>")>> <<else>> <<run $morning_notifications.unshift("<em>You slept like a baby in the luxury hotel bed.</em>")>> <</if>> <<set $stamina to $maxstamina>> <<endOfDayChecks>> <<set $wake_location to "Neon_Hotel">> <<goto "Wake_Up">> <</link>><br><br> <<link "Leave your room (Back to Lobby)">> <<set $room_result to "">> <<goto "Neon_Hotel">> <</link>>
<h3>Equipment & Loadout</h3> <<nobr>> <div style="display: flex; gap: 10px; margin-bottom: 20px;"> <!-- Slot Arme de mêlée --> <div style="flex: 1; background-color: #1a1a1a; padding: 15px; border-left: 3px solid #ffaa00;"> <h4>Active Melee</h4> <<if $active_melee is "none">> <span style="color: #888;">None</span> <<else>> <span style="color: #00ffaa;"><strong><<print $weapon_db[$active_melee].name>></strong></span> <br><em>Damage: <<print $weapon_db[$active_melee].damage>></em> <</if>> </div> <!-- Slot Arme à feu --> <div style="flex: 1; background-color: #1a1a1a; padding: 15px; border-left: 3px solid #ff4444;"> <h4>Active Firearm</h4> <<if $active_firearm is "none">> <span style="color: #888;">None</span> <<else>> <span style="color: #00ffaa;"><strong><<print $weapon_db[$active_firearm].name>></strong></span> <br><em>Damage: <<print $weapon_db[$active_firearm].damage>> | Mag: <<print $gun_mag>> / <<print $weapon_db[$active_firearm].mag_size>></em> <<if $gun_mag < $weapon_db[$active_firearm].mag_size and $inventory.ammo > 0>> <br><<link "[ 🔄 Reload Magazine ]">> <<set $gun_max_mag to $weapon_db[$active_firearm].mag_size>> <<set _needed to $gun_max_mag - $gun_mag>> <<set _toLoad to Math.min(_needed, $inventory.ammo)>> <<set $gun_mag += _toLoad>> <<set $inventory.ammo -= _toLoad>> <<goto "Player_Loadout">> <</link>> <</if>> <</if>> <br><strong>Total Ammo Reserve:</strong> <span style="color: #ffaa00;"><<print $inventory.ammo>> rounds</span> </div> <!-- Slot Tenue --> <div style="flex: 1; background-color: #1a1a1a; padding: 15px; border-left: 3px solid #00aaff;"> <h4>Active Outfit</h4> <<if $active_outfit is "none" or $active_outfit is undefined or $outfit_db is undefined or $outfit_db[$active_outfit] is undefined>> <span style="color: #888;">Basic Street Clothes</span> <<else>> <span style="color: #00aaff;"><strong><<print $outfit_db[$active_outfit].name>></strong></span> <br><em style="color: #00ffaa; font-size: 0.85em;"><<print $outfit_db[$active_outfit].bonus_text>></em> <</if>> </div> </div> <strong>Melee Weapons:</strong><br> <<set _hasMelee to false>> <<for _i to 0; _i < $inventory.weapons.length; _i++>> <<set _wepId to $inventory.weapons[_i]>> <<if $weapon_db[_wepId].type is "melee">> <<set _hasMelee to true>> <<capture _wepId>> <<if $active_melee is _wepId>> <span style="color: #00ffaa;">[ EQUIPPED ]</span> <<print $weapon_db[_wepId].name>> (Dmg: <<print $weapon_db[_wepId].damage>>)<br> <<else>> <<link "[ Equip ]">> <<set $active_melee to _wepId>> <<goto "Player_Loadout">> <</link>> <<print $weapon_db[_wepId].name>> (Dmg: <<print $weapon_db[_wepId].damage>>)<br> <</if>> <</capture>> <</if>> <</for>> <<if _hasMelee is false>> <span style="color: #888;">You don't own any melee weapons.</span><br> <</if>> <br><br> <strong>Firearms:</strong><br> <<set _hasFirearm to false>> <<for _i to 0; _i < $inventory.weapons.length; _i++>> <<set _wepId to $inventory.weapons[_i]>> <<if $weapon_db[_wepId].type is "firearm">> <<set _hasFirearm to true>> <<capture _wepId>> <<if $active_firearm is _wepId>> <span style="color: #00ffaa;">[ EQUIPPED ]</span> <<print $weapon_db[_wepId].name>> (Dmg: <<print $weapon_db[_wepId].damage>> | Mag: <<print $weapon_db[_wepId].mag_size>>)<br> <<else>> <<link "[ Equip ]">> /* Si une arme était déjà équipée, on remet ses balles dans la réserve */ <<if $active_firearm isnot "none" and $gun_mag > 0>> <<set $inventory.ammo += $gun_mag>> <</if>> <<set $active_firearm to _wepId>> <<set $gun_max_mag to $weapon_db[_wepId].mag_size>> <<set _toLoad to Math.min($gun_max_mag, $inventory.ammo)>> <<set $gun_mag to _toLoad>> <<set $inventory.ammo -= _toLoad>> <<goto "Player_Loadout">> <</link>> <<print $weapon_db[_wepId].name>> (Dmg: <<print $weapon_db[_wepId].damage>> | Mag: <<print $weapon_db[_wepId].mag_size>>)<br> <</if>> <</capture>> <</if>> <</for>> <<if _hasFirearm is false>> <span style="color: #888;">You don't own any firearms.</span><br> <</if>> <br><br> <strong>Wardrobe & Outfits:</strong><br> <<if $inventory.outfits is undefined>><<set $inventory.outfits to []>><</if>> <<if $inventory.outfits.length > 0>> <<for _i to 0; _i < $inventory.outfits.length; _i++>> <<set _outId to $inventory.outfits[_i]>> <<if $outfit_db[_outId] isnot undefined>> <<capture _outId>> <<if $active_outfit is _outId>> <span style="color: #00ffaa;">[ EQUIPPED ]</span> <<print $outfit_db[_outId].name>> (<span style="color: #00aaff;"><<print $outfit_db[_outId].bonus_text>></span>)<br> <<else>> <<link "[ Equip ]">> <<equipOutfit _outId>> <<goto "Player_Loadout">> <</link>> <<print $outfit_db[_outId].name>> (<span style="color: #00aaff;"><<print $outfit_db[_outId].bonus_text>></span>)<br> <</if>> <</capture>> <</if>> <</for>> <<else>> <span style="color: #888;">You don't own any special outfits yet. Visit Vespera Menswear at the Grand Mall.</span><br> <</if>> <br><br> /* BOUTONS POUR DÉSÉQUIPER */ <<if $active_outfit isnot "none" and $active_outfit isnot undefined>> <<link "Unequip Outfit">> <<unequipOutfit>> <<goto "Player_Loadout">> <</link>><br> <</if>> <<if $active_melee isnot "none">> <<link "Unequip Melee Weapon">> <<set $active_melee to "none">> <<goto "Player_Loadout">> <</link>><br> <</if>> <<if $active_firearm isnot "none">> <<link "Unequip Firearm">> <<if $gun_mag > 0>> <<set $inventory.ammo += $gun_mag>> <<set $gun_mag to 0>> <</if>> <<set $active_firearm to "none">> <<goto "Player_Loadout">> <</link>><br> <</if>> <</nobr>> [[Back|Home]]
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/port.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> You are at the Port. The chill of the ocean wind bites at your skin, mixing with the harsh smell of diesel fuel, dead fish, and rusted metal. Massive cargo cranes loom overhead like mechanical giants in the fog. Shady crews and exhausted dockworkers move heavy crates through the damp, echoing shipping yards. --- <<nobr>> <<if $port_log isnot "">> $port_log <br>---<br> <</if>> <<if $contraband_warehouse_owned is undefined>><<set $contraband_warehouse_owned to false>><</if>> <<if $contraband_warehouse_capacity is undefined>><<set $contraband_warehouse_capacity to 6>><</if>> <<if $last_container_buy_day is undefined>><<set $last_container_buy_day to -1>><</if>> <<set _currentDay to Math.floor($time / 1440)>> <<set _totalCrates to 0>> <<for _cIdx to 0; _cIdx < $contraband_types.length; _cIdx++>> <<set _totalCrates += ($container_stash[$contraband_types[_cIdx]] || 0)>> <</for>> A shady docker leans against a rusted forklift. He spots you and spits on the ground.<br> "Got an undocumented container. Manifest is 'lost'. <strong>$1,000</strong> and whatever is inside is yours. One container per day before customs catches on."<br><br> <<if $contraband_warehouse_owned is false>> <span style="color: #ffaa00;"><em>// "Where the hell are you gonna store heavy cargo crates, pal? In your bedroom? Buy the lease on <strong>Warehouse 12</strong> down the pier first, then we'll talk." //</em></span> <<elseif _totalCrates >= $contraband_warehouse_capacity>> <span style="color: #ffaa00;"><em>// Your Contraband Depot (Warehouse 12) is completely full (<<print _totalCrates>> / <<print $contraband_warehouse_capacity>> crates). Deliver, fence, or expand your storage before buying another container. //</em></span> <<elseif _currentDay <= $last_container_buy_day>> <span style="color: #888;"><em>// "Harbor patrol is circling the cranes after the container we cracked earlier today. Come back tomorrow for a fresh manifest." //</em></span> <<elseif $money >= 1000>> <<link "Buy blind container access ($1,000)">> <<set $money -= 1000>> <<set $last_container_buy_day to _currentDay>> <<set $container_generated to false>> <<set $port_log to "">> <<goto "Port_Container_Loot">> <</link>> <<else>> //You lack the funds ($1,000) to bribe the docker for a blind container.// <</if>> <br><br> --- [[Approach Warehouse 12 (Contraband Storage Depot)|Port_Contraband_Warehouse]]<br> [[Approach Warehouse 7 (Cartel Contact)|Port_Cartel_Contact]]<br> <<if $empire_properties && $empire_properties.chemlab && ($empire_properties.chemlab.owned or $empire_properties.chemlab.rented)>> [[🏭 Industrial Chemical Lab|Property_ChemLab]]<br> <</if>> <<if $owned_vehicles.includes("Utility Van") and $garage_level > 0 and $basement_level > 0>> <br> [[Prowl the streets for targets (Takes 1 hour)|Kidnap_Encounter]]<br> <</if>> <<if $garage_level > 0>> <br> [[Look for an easy carjack|Action_CarTheft]]<br> <</if>> <<if $active_job isnot null>> <br><strong>Active Contract:</strong><br> <<link `"Look for your target (" + $active_job.name + ")"`>> <<set $location_attempt to "Port">> /* <- CHANGEZ CECI SELON LE QUARTIER */ <<goto "DarkWeb_Job_Resolution">> <</link>><br> <</if>> /* --- RECHERCHE DE FILLES KIDNAPPÉES ICI --- */ <<set _kidnapped_here to []>> <<for _i to 0; _i < $network_girls.length; _i++>> <<if $network_girls[_i].status is "kidnapped" and $network_girls[_i].kidnap_location is $current_location>> <<run _kidnapped_here.push({ index: _i, girl: $network_girls[_i] })>> <</if>> <</for>> <<if _kidnapped_here.length > 0>> <div style="background-color: #222; padding: 10px; border-left: 3px solid #ffaa00; margin-bottom: 20px;"> <strong>Rival Gang Hideout Spotted!</strong><br> You have intel that your missing employees are being held in an abandoned building nearby. <br><br> <<for _j to 0; _j < _kidnapped_here.length; _j++>> <<set _target to _kidnapped_here[_j]>> <<capture _target>> <<link "Rescue _target.girl.name from the gang">> /* On sauvegarde l'index global de la fille pour la suite */ <<set $rescue_target_index to _target.index>> <<goto "Action_RescueKidnapped">> <</link>><br> <</capture>> <</for>> </div> <</if>> [[Head down to the Beach |Beach]]<br> [[Look for drug deals|Drug_Market]]<br> [[Back to City Map|City_Hub]] <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/cartelcontact.png" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>Port - Warehouse 7</h3> The interior of the warehouse is pitch black, except for a single hanging bulb casting light over a metallic table. A man in a tailored suit stands flanked by two armed guards. <strong>Your Wallet:</strong> $<<print $money>> <strong>Your Cellar Occupancy:</strong> <<print $basement_captives.length>> captives held. --- <<nobr>> <<if $cartel_log isnot "">> <div style="background-color: #1a2a1a; padding: 10px; border-left: 3px solid #00ffaa; margin-bottom: 15px;"> $cartel_log </div> <</if>> /* --- 1. LOGIQUE DE GÉNÉRATION HEBDOMADAIRE (1 jour = 1440 minutes) --- */ <<set _currentDay to Math.floor($time / 1440)>> <<set _hideoutEmployees to []>> <<if $network_girls !== undefined>> <<for _j to 0; _j < $network_girls.length; _j++>> <<if $network_girls[_j].location is "hideout" and $network_girls[_j].status isnot "arrested" and $network_girls[_j].status isnot "kidnapped">> <<run _hideoutEmployees.push({ index: _j, girl: $network_girls[_j] })>> <</if>> <</for>> <</if>> <<if _currentDay >= $last_cartel_contract_day + 7>> <<set $last_cartel_contract_day to _currentDay>> <<set _roll to random(1, 3)>> <<if _roll is 1>> /* Lot de captives (Entre 4 et 5 pour forcer l'upgrade de la cave) */ <<set $cartel_contract to { type: "captives", amount: random(4, 5), reward: random(7000, 11000), completed: false }>> <<elseif _roll is 2>> /* Contrebande maritime (1 à 3 conteneurs) */ <<set _amount to random(1, 3)>> <<set _requestedItems to []>> <<for _i to 0; _i < _amount; _i++>> <<run _requestedItems.push($contraband_types.random())>> <</for>> /* La récompense s'adapte à la quantité demandée (ex: 4000$ par conteneur) */ <<set $cartel_contract to { type: "contraband", amount: _amount, items: _requestedItems, reward: (_amount * 4000), completed: false }>> <<else>> /* Voitures volées */ <<set $cartel_contract to { type: "cars", amount: 2, reward: 4000, completed: false }>> <</if>> <</if>> /* --- 2. AFFICHAGE DU CONTRAT HEBDOMADAIRE EN COURS --- */ <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #ffaa00; margin-bottom: 20px;"> <h4>📋 Weekly Syndicate Contract</h4> <<if $cartel_contract.completed is true>> "We are done with the weekly manifest. The cargo is already at sea. Come back next week for a new manifest," the contact says coldly. <br> <<else>> "Listen up," the contact says, checking a tablet. "Here is what the syndicate needs encrypted on the next cargo ship:" <br><br> /* ======================================================= */ /* CAS A : LOT DE FEMMES (CELLAR & HIDEOUT) */ /* ======================================================= */ <<if $cartel_contract.type is "captives">> <strong>Demand:</strong> Export a batch of <strong>$cartel_contract.amount</strong> women overseas. No questions asked.<br> <strong>Payout:</strong> <strong>$<<print $cartel_contract.reward>></strong><br><br> <<set _totalEligible to $basement_captives.length + _hideoutEmployees.length>> <<if _totalEligible >= $cartel_contract.amount>> <<if $cartel_selected_indices is undefined>> <<set $cartel_selected_indices to []>> <</if>> <<script>> if (State.variables.cartel_selected_indices) { State.variables.cartel_selected_indices = State.variables.cartel_selected_indices.filter(function(key) { if (typeof key !== 'string') return false; if (key.indexOf('cap_') === 0) { var cIdx = parseInt(key.replace('cap_', ''), 10); return !isNaN(cIdx) && cIdx >= 0 && cIdx < State.variables.basement_captives.length; } if (key.indexOf('emp_') === 0) { var eIdx = parseInt(key.replace('emp_', ''), 10); return !isNaN(eIdx) && eIdx >= 0 && eIdx < State.variables.network_girls.length && State.variables.network_girls[eIdx].location === "hideout"; } return false; }); } <</script>> <strong>Select women to sell from your cellar or hideout ( <<print $cartel_selected_indices.length>> / <<print $cartel_contract.amount>> ) :</strong><br> <div style="background-color: #222; padding: 10px; margin-top: 10px; margin-bottom: 15px; max-height: 280px; overflow-y: auto; border: 1px solid #444;"> <<if $basement_captives.length > 0>> <div style="color: #aa55ff; font-weight: bold; margin-bottom: 6px;">Basement Captives:</div> <<for _i to 0; _i < $basement_captives.length; _i++>> <<capture _i>> <<set _captive to $basement_captives[_i]>> <<set _capKey to "cap_" + _i>> <div style="padding: 8px; border-bottom: 1px solid #333;"> <strong><<print _captive.name>></strong> (<<print _captive.race.toUpperFirst()>>) <span style="color: #aa55ff; font-size: 0.85em;">[Basement Cellar]</span><br> <span style="font-size: 0.9em; color: #aaa;"> Discipline: <<print _captive.discipline>>/100 | Base Income: $<<print _captive.base_income>> </span> <span style="float: right; margin-top: -15px;"> <<if $cartel_selected_indices.includes(_capKey)>> <span style="color: #00ffaa; font-weight: bold;">[ Selected ]</span> <<link "(Undo)">> <<run $cartel_selected_indices.delete(_capKey)>> <<goto "Port_Cartel_Contact">> <</link>> <<else>> <<if $cartel_selected_indices.length < $cartel_contract.amount>> <<link "[ Select ]">> <<run $cartel_selected_indices.push(_capKey)>> <<goto "Port_Cartel_Contact">> <</link>> <<else>> <span style="color: #888;">[ Limit Reached ]</span> <</if>> <</if>> </span> </div> <</capture>> <</for>> <</if>> <<if _hideoutEmployees.length > 0>> <div style="color: #00e5ff; font-weight: bold; margin-top: 10px; margin-bottom: 6px;">Hideout Employees:</div> <<for _h to 0; _h < _hideoutEmployees.length; _h++>> <<set _hIdx to _hideoutEmployees[_h].index>> <<set _hGirl to _hideoutEmployees[_h].girl>> <<set _hDisc to (_hGirl.discipline !== undefined ? _hGirl.discipline : 100)>> <<set _empKey to "emp_" + _hIdx>> <<capture _hIdx, _hGirl, _hDisc, _empKey>> <div style="padding: 8px; border-bottom: 1px solid #333;"> <strong><<print _hGirl.name>></strong> (<<print _hGirl.race.toUpperFirst()>>) <span style="color: #00e5ff; font-size: 0.85em;">[Hideout Staff]</span><br> <span style="font-size: 0.9em; color: #aaa;"> Discipline: <<print _hDisc>>/100 | Base Income: $<<print _hGirl.base_income>> </span> <span style="float: right; margin-top: -15px;"> <<if $cartel_selected_indices.includes(_empKey)>> <span style="color: #00ffaa; font-weight: bold;">[ Selected ]</span> <<link "(Undo)">> <<run $cartel_selected_indices.delete(_empKey)>> <<goto "Port_Cartel_Contact">> <</link>> <<else>> <<if $cartel_selected_indices.length < $cartel_contract.amount>> <<link "[ Select ]">> <<run $cartel_selected_indices.push(_empKey)>> <<goto "Port_Cartel_Contact">> <</link>> <<else>> <span style="color: #888;">[ Limit Reached ]</span> <</if>> <</if>> </span> </div> <</capture>> <</for>> <</if>> </div> <<if $cartel_selected_indices.length is $cartel_contract.amount>> <<link "Confirm Sale and Deliver Selected Women">> <<set $money += $cartel_contract.reward>> <<set $cartel_contract.completed to true>> <<set $prison_gang_rep.cartel += 10>> <<addHeat 6>> <<script>> var sel = State.variables.cartel_selected_indices || []; var capIndices = []; var empIndices = []; for (var k = 0; k < sel.length; k++) { var item = sel[k]; if (typeof item === 'string') { if (item.indexOf('cap_') === 0) { capIndices.push(parseInt(item.replace('cap_', ''), 10)); } else if (item.indexOf('emp_') === 0) { empIndices.push(parseInt(item.replace('emp_', ''), 10)); } } } capIndices.sort(function(a, b) { return b - a; }); empIndices.sort(function(a, b) { return b - a; }); for (var c = 0; c < capIndices.length; c++) { State.variables.basement_captives.splice(capIndices[c], 1); } for (var e = 0; e < empIndices.length; e++) { State.variables.network_girls.splice(empIndices[e], 1); } <</script>> <<unset $cartel_selected_indices>> <<set $cartel_log to "Your van backs up to the container. The selected women from your operation are transferred into the steel shipping box. The contact hands you a briefcase full of cash (+10 Cartel Rep, +6 Heat).">> <<goto "Port">> <</link>> <<else>> <span style="color: #888;"><em>You must select exactly $cartel_contract.amount women to proceed with the transaction.</em></span> <</if>> <br> <<else>> //You do not have enough women (_totalEligible / $cartel_contract.amount) in your cellar or hideout to fulfill this order.//<br> <</if>> /* ======================================================= */ /* CAS B : CONTREBANDE DE CONTAINER */ /* ======================================================= */ <<elseif $cartel_contract.type is "contraband">> <strong>Demand:</strong> The syndicate needs specific cargo shipped tonight. They require:<br> <ul> <<for _i to 0; _i < $cartel_contract.items.length; _i++>> <li>1x Crate of <strong>$cartel_contract.items[_i]</strong></li> <</for>> </ul> <strong>Payout:</strong> <strong>$<<print $cartel_contract.reward>></strong><br><br> <<set _hasAllItems to true>> <<set _tempStash to clone($container_stash)>> <<for _i to 0; _i < $cartel_contract.items.length; _i++>> <<set _needed to $cartel_contract.items[_i]>> <<if _tempStash[_needed] > 0>> <<set _tempStash[_needed] -= 1>> <<else>> <<set _hasAllItems to false>> <<break>> <</if>> <</for>> <<if _hasAllItems is true>> <<link "Deliver the requested cargo containers">> <<set $money += $cartel_contract.reward>> <<set $cartel_contract.completed to true>> <<set $prison_gang_rep.cartel += 10>> <<addHeat 5>> <<for _i to 0; _i < $cartel_contract.items.length; _i++>> <<set _needed to $cartel_contract.items[_i]>> <<set $container_stash[_needed] -= 1>> <</for>> <<set $cartel_log to "You direct the dockworkers to load your hidden crates onto the syndicate's ship. The contact inspects the " + $cartel_contract.amount + " containers, nods, and hands you your payment (+10 Cartel Rep, +5 Heat).">> <<goto "Port">> <</link>><br> <<else>> //You do not have the exact cargo requested in your stash to fulfill this order.//<br> <</if>> /* ======================================================= */ /* CAS C : VOITURES VOLÉES */ /* ======================================================= */ <<elseif $cartel_contract.type is "cars">> <strong>Demand:</strong> Secure 2 luxury sports cars or hypercars for export.<br> <strong>Payout:</strong> <strong>$<<print $cartel_contract.reward>></strong><br><br> <<set _luxury_count to 0>> <<for _i to 0; _i < $stolen_vehicles.length; _i++>> <<if $stolen_vehicles[_i] is "Sports Car" or $stolen_vehicles[_i] is "Hypercar">> <<set _luxury_count += 1>> <</if>> <</for>> <strong>Your Garage Inventory:</strong> _luxury_count / 2 luxury vehicles found.<br><br> <<if _luxury_count >= 2>> <<link "Hand over 2 luxury vehicles for export">> <<set _removed to 0>> <<for _i to $stolen_vehicles.length - 1; _i >= 0; _i-->> <<if (_removed < 2) and ($stolen_vehicles[_i] is "Sports Car" or $stolen_vehicles[_i] is "Hypercar")>> <<run $stolen_vehicles.deleteAt(_i)>> <<set _removed += 1>> <</if>> <</for>> <<set $money += $cartel_contract.reward>> <<addXP 100>> <<set $prison_gang_rep.cartel += 10>> <<addHeat 5>> <<set $cartel_contract.completed to true>> <<set $cartel_log to "You handed over the keys to the cartel's associates. The payment has been wired to your account (+10 Cartel Rep, +5 Heat).">> <<goto "Port">> <</link>> <<else>> <span style="color: #ff4444;"><em>You don't have enough luxury vehicles in your garage (Sports Car or Hypercar).</em></span><br> <</if>> <</if>> <</if>> </div> /* --- 3. RÉSEAU DE GROSSISTE DE DROGUE DU CARTEL (DANS WAREHOUSE 7) --- */ <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #00aaff; margin-bottom: 20px;"> <h4>📦 Cartel Narcotics Wholesale</h4> <<if $harbor_smuggling_unlocked is false>> Establish a direct wholesale supply line with the cartel's freighter captains. Unlocks <strong>permanent -20% wholesale prices</strong> across all street drug markets and allows buying bulk crates of narcotics directly here in Warehouse 7.<br><br> <strong>Connection Fee:</strong> $10,000<br><br> <<if $money >= 10000>> <<link "[ Establish Cartel Supply Line ($10,000) ]">> <<set $money -= 10000>> <<set $harbor_smuggling_unlocked to true>> <<set $prison_gang_rep.cartel += 15>> <<updateMarket>> <<set $cartel_log to "<strong>Cartel Supply Line Established!</strong> You now receive a permanent 20% discount on all drug markets and can order wholesale crates below (+15 Cartel Rep).">> <<goto "Port_Cartel_Contact">> <</link>> <<else>> <span style="color: #888;">[ Requires $10,000 ]</span> <</if>> <<else>> <span style="color: #00ffaa;"><strong>[ Active Cartel Supply Line — 20% Global Street Discount Active ]</strong></span><br><br> <strong>Order Bulk Narcotics Crates (25 Units per crate):</strong><br> <<if $money >= 150>> <<link "[ Buy 25x Weed ($150) ]">> <<set $money -= 150>><<set $inventory.weed += 25>><<set $counters.drugs_bought += 25>> <<set $cartel_log to "Loaded 25 units of Weed into your stash.">><<goto "Port_Cartel_Contact">> <</link>><br> <</if>> <<if $money >= 250>> <<link "[ Buy 25x Ecstasy ($250) ]">> <<set $money -= 250>><<set $inventory.ecstasy += 25>><<set $counters.drugs_bought += 25>> <<set $cartel_log to "Loaded 25 units of Ecstasy into your stash.">><<goto "Port_Cartel_Contact">> <</link>><br> <</if>> <<if $money >= 300>> <<link "[ Buy 25x Crack ($300) ]">> <<set $money -= 300>><<set $inventory.crack += 25>><<set $counters.drugs_bought += 25>> <<set $cartel_log to "Loaded 25 units of Crack into your stash.">><<goto "Port_Cartel_Contact">> <</link>><br> <</if>> <<if $money >= 900>> <<link "[ Buy 25x Heroin ($900) ]">> <<set $money -= 900>><<set $inventory.heroin += 25>><<set $counters.drugs_bought += 25>> <<set $cartel_log to "Loaded 25 units of Heroin into your stash.">><<goto "Port_Cartel_Contact">> <</link>><br> <</if>> <<if $money >= 1400>> <<link "[ Buy 25x Pure Cocaine ($1,400) ]">> <<set $money -= 1400>><<set $inventory.cocaine += 25>><<set $counters.drugs_bought += 25>> <<set $cartel_log to "Loaded 25 bricks of Pure Cocaine into your stash.">><<goto "Port_Cartel_Contact">> <</link>><br> <</if>> <</if>> </div> /* --- 4. TRAFIC INDIVIDUEL D'HUMAINS PAR CONTAINERS (DANS WAREHOUSE 7) --- */ <<if $last_container_export_day is undefined>><<set $last_container_export_day to -7>><</if>> <div style="background-color: #1a1a1a; padding: 15px; border-left: 4px solid #ff0055; margin-bottom: 20px;"> <h4>🚢 Direct Container Export (Once per Week | Requires >80% Discipline)</h4> Export a single conditioned captive from your basement or employee from your hideout to the cartel's overseas buyers via retrofitted shipping containers. The cartel only accepts broken merchandise (<strong>over 80% Discipline</strong>) and only loads one individual export per week.<br><br> <<if _currentDay < $last_container_export_day + 7>> <<set _exportDaysLeft to ($last_container_export_day + 7) - _currentDay>> <span style="color: #ffaa00;"><em>"The outbound freighter has already sailed for this week. Come back in <strong>_exportDaysLeft day(s)</strong> if you have another conditioned girl," the dock boss tells you.</em></span> <<elseif $basement_captives.length is 0 and _hideoutEmployees.length is 0>> <em>You have no captives in your basement cells or employees at your hideout to ship.</em> <<else>> <<if $basement_captives.length > 0>> <h5 style="color: #aa55ff; margin: 8px 0 6px 0;">Basement Captives:</h5> <<for _i to 0; _i < $basement_captives.length; _i++>> <<set _cap to $basement_captives[_i]>> <<set _exportValue to 350 + (_cap.discipline * 16)>> <<capture _i, _cap, _exportValue>> <div style="background-color: #111; padding: 10px; margin-bottom: 8px; border: 1px solid #333;"> <strong><<print _cap.name>></strong> (<<print _cap.race.toUpperFirst()>> | Discipline: <<print _cap.discipline>>%) <span style="color: #aa55ff; font-size: 0.85em;">[Cellar Captive]</span> <span style="float: right;"> <<if _cap.discipline > 80>> <<link `"[ Ship in Container (+$" + _exportValue + ") ]"`>> <<set $money += _exportValue>> <<set $last_container_export_day to Math.floor($time / 1440)>> <<set $prison_gang_rep.cartel += 5>> <<addHeat 4>> <<addXP 25>> <<run $basement_captives.deleteAt(_i)>> <<set $cartel_log to "<strong>" + _cap.name + "</strong> was locked into Container #409 and loaded onto the weekly cartel freighter. You received <strong>$" + _exportValue + "</strong> (+5 Cartel Rep, +4 Heat).">> <<goto "Port_Cartel_Contact">> <</link>> <<else>> <span style="color: #ff4444; font-size: 0.85em;">[ Requires >80% Discipline ]</span> <</if>> </span> <div style="clear: both;"></div> </div> <</capture>> <</for>> <</if>> <<if _hideoutEmployees.length > 0>> <h5 style="color: #00e5ff; margin: 12px 0 6px 0;">Hideout Employees:</h5> <<for _h to 0; _h < _hideoutEmployees.length; _h++>> <<set _hIdx to _hideoutEmployees[_h].index>> <<set _hGirl to _hideoutEmployees[_h].girl>> <<set _hDisc to (_hGirl.discipline !== undefined ? _hGirl.discipline : 100)>> <<set _hExportValue to 350 + (_hDisc * 16)>> <<capture _hIdx, _hGirl, _hDisc, _hExportValue>> <div style="background-color: #111; padding: 10px; margin-bottom: 8px; border: 1px solid #333;"> <strong><<print _hGirl.name>></strong> (<<print _hGirl.race.toUpperFirst()>> | Discipline: <<print _hDisc>>%) <span style="color: #00e5ff; font-size: 0.85em;">[Hideout Staff]</span> <span style="float: right;"> <<if _hDisc > 80>> <<link `"[ Ship in Container (+$" + _hExportValue + ") ]"`>> <<set $money += _hExportValue>> <<set $last_container_export_day to Math.floor($time / 1440)>> <<set $prison_gang_rep.cartel += 5>> <<addHeat 4>> <<addXP 25>> <<run $network_girls.deleteAt(_hIdx)>> <<set $cartel_log to "<strong>" + _hGirl.name + "</strong> was taken from your hideout, locked into Container #409 and loaded onto the weekly cartel freighter. You received <strong>$" + _hExportValue + "</strong> (+5 Cartel Rep, +4 Heat).">> <<goto "Port_Cartel_Contact">> <</link>> <<else>> <span style="color: #ff4444; font-size: 0.85em;">[ Requires >80% Discipline ]</span> <</if>> </span> <div style="clear: both;"></div> </div> <</capture>> <</for>> <</if>> <</if>> </div> <br>---<br> <</nobr>> <<link "Leave Warehouse 7">> /* Nettoyage de la variable de sélection si le joueur quitte au milieu */ <<unset $cartel_selected_indices>> <<set $cartel_log to "">> <<goto "Port">> <</link>>
<style> .container-loot-wrap { max-width: 700px; margin: 10px auto; background: linear-gradient(165deg, #0d151c 0%, #070b0f 100%); border: 2px solid #263849; border-radius: 12px; padding: 22px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.85); font-family: 'Segoe UI', Tahoma, sans-serif; } .container-top-bar { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; background: #101b24; border: 1px solid #223546; border-radius: 8px; padding: 12px 16px; margin-bottom: 16px; } .container-badge { font-size: 0.8em; padding: 4px 10px; border-radius: 6px; background: rgba(0, 229, 255, 0.1); border: 1px solid rgba(0, 229, 255, 0.35); color: #80deea; font-weight: 700; } .container-log-box { background: rgba(16, 28, 38, 0.9); border-left: 4px solid #00e5ff; border-radius: 6px; padding: 12px 16px; margin-bottom: 16px; color: #dce7f0; } .container-crates-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin: 14px 0 20px 0; } .container-crate-card { background: #131f2b; border: 1px solid #2b4257; border-radius: 8px; padding: 15px; display: flex; flex-direction: column; justify-content: space-between; transition: all 0.15s ease; } .container-crate-card:hover { border-color: #ffaa00; transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0, 0, 0, 0.5); } .container-crate-card a { display: block; margin-top: 12px; padding: 8px 10px; background: linear-gradient(180deg, #2b4257 0%, #1a2a38 100%); border: 1px solid #4a6b8a; border-radius: 6px; color: #fff !important; font-weight: 700; font-size: 0.88em; text-align: center; text-decoration: none !important; } .container-crate-card a:hover { background: linear-gradient(180deg, #ffaa00 0%, #cc7a00 100%); border-color: #ffd54f; color: #111 !important; } </style> <<nobr>> /* GÉNÉRATION STRICTE DU CONTENEUR */ <<if $container_generated isnot true>> <<set $container_generated to true>> <<set $container_log to "">> <<set $container_spots to []>> /* On clone la liste avec slice() pour ne pas détruire l'originale */ <<set _pool to ["Wooden Crate", "Steel Drum", "Pallet of unmarked boxes", "Heavy Duffle Bag", "Plastic Bin", "Weapon Crate"].slice()>> /* pluck() prend un élément au hasard, le retire de _pool et le renvoie. 0% de chance de doublon. */ <<for _i to 0; _i < 3; _i++>> <<run $container_spots.push(_pool.pluck())>> <</for>> <</if>> <<set _crateIcons to { "Wooden Crate": "📦", "Steel Drum": "🛢️", "Pallet of unmarked boxes": "🧱", "Heavy Duffle Bag": "🎒", "Plastic Bin": "🗑️", "Weapon Crate": "🧰" }>> <<set _totalCrates to 0>> <<for _cIdx to 0; _cIdx < $contraband_types.length; _cIdx++>> <<set _totalCrates += ($container_stash[$contraband_types[_cIdx]] || 0)>> <</for>> <div class="container-loot-wrap"> <div class="container-top-bar"> <div> <h3 style="margin: 0; color: #e2f1ff; text-transform: uppercase; letter-spacing: 1px;">🚢 Blind Shipping Container Inspection</h3> <span style="font-size: 0.82em; color: #8fa6bc;">Corrugated steel walls, salt air, and sealed manifest crates.</span> </div> <div style="display: flex; gap: 8px; flex-wrap: wrap;"> <span class="container-badge">⚡ Stamina: <<print $stamina>></span> <span class="container-badge">🏭 Warehouse 12: <<print _totalCrates>> / <<print $contraband_warehouse_capacity>> Crates</span> </div> </div> <<if $container_log isnot "">> <div class="container-log-box"> $container_log </div> <</if>> <div style="font-size: 0.85em; color: #9ab3c9; text-transform: uppercase; letter-spacing: 1px; font-weight: 700;"> 🛠️ Uninspected Cargo Manifest (Requires 15 Stamina & 20 mins per unit): </div> <<if $container_spots.length is 0>> <div style="background: rgba(255,255,255,0.03); border: 1px dashed #314a61; border-radius: 8px; padding: 20px; text-align: center; color: #7c96ad; margin: 16px 0;"> <em>Every crate inside this container has been pried open and cleared out.</em> </div> <<elseif _totalCrates >= $contraband_warehouse_capacity>> <div style="background: rgba(255, 170, 0, 0.1); border: 1px solid #ffaa00; border-radius: 8px; padding: 16px; color: #ffcc66; margin: 16px 0;"> <strong>⚠️ Warehouse 12 Full (<<print _totalCrates>> / <<print $contraband_warehouse_capacity>> crates):</strong> You have no depot space left to store additional contraband crates! </div> <<elseif $stamina < 15>> <div style="background: rgba(255, 68, 68, 0.1); border: 1px solid #ff4444; border-radius: 8px; padding: 16px; color: #ff8888; margin: 16px 0;"> <strong>⚠️ Too Exhausted:</strong> You need at least <strong>15 Stamina</strong> to pry open heavy steel-banded cargo crates with your crowbar. </div> <<else>> <div class="container-crates-grid"> <<for _i to 0; _i < $container_spots.length; _i++>> <<set _spotDisplay to $container_spots[_i]>> <<set _cIcon to _crateIcons[_spotDisplay] || "📦">> <<capture _i, _spotDisplay>> <div class="container-crate-card"> <div> <div style="font-size: 1.05em; font-weight: 800; color: #f0f7ff;">_cIcon _spotDisplay</div> <div style="font-size: 0.78em; color: #86a0b8; margin-top: 6px;">Sealed overseas parcel • Crowbar pry (-15 Stamina, +20m)</div> </div> <<link `"🔧 Pry Open (-15 Stamina)"`>> <<set _oldTime to $time>><<set $time += 20>> <<set $stamina -= 15>> <<set $counters.total_searches += 1>> /* Mécanique de butin : 20% Contrebande (30% avec Scavenger), 15% Patrouille Douanière (+3 Heat), 65% Déchets industriels */ <<set _findChance to ($traits.scavenger is true ? 30 : 20)>> <<set _roll to random(1, 100)>> <<if _roll <= _findChance>> <<set _foundItem to $contraband_types.random()>> <<set $container_stash[_foundItem] += 1>> <<set $container_log to "<span style='color: #00ffaa;'><strong>📦 Contraband Jackpot!</strong> The <strong>" + _spotDisplay + "</strong> concealed smuggled syndicate stock. Your crew hauls <strong>1x Crate of " + _foundItem + "</strong> into Warehouse 12.</span>">> <<elseif _roll <= (_findChance + 15)>> <<addHeat 3>> <<set $container_log to "<span style='color: #ffaa00;'><strong>🚨 Harbor Customs Sweep:</strong> A customs patrol drone scanned the open container bay while you were breaking into the <strong>" + _spotDisplay + "</strong>—nothing inside but spoiled grain, and port security logged suspicious activity (+3% Heat).</span>">> <<else>> <<set $container_log to "You pried open the <strong>" + _spotDisplay + "</strong> with your crowbar, revealing only corroded industrial fittings, damp packing foam, and worthless scrap.">> <</if>> <<run $container_spots.deleteAt(_i)>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Port_Container_Loot">> <</if>> <</link>> </div> <</capture>> <</for>> </div> <</if>> <div style="border-top: 1px solid #223546; padding-top: 14px; text-align: right;"> <<link "⚓ Seal container and return to the Port">> <<set $container_generated to false>> <<set $container_log to "">> <<goto "Port">> <</link>> </div> </div> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/projects.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> You are in the Projects. The concrete buildings tower above you, casting long shadows. It's rough around the edges, but it's your turf for now. Some kids are hanging around the corner, and the neon sign of the local store flickers in the distance. <<nobr>> <<if $player_housing is 0>> <<link "Enter your Apartment">><<goto "Home">><</link>> <br> <</if>> [[The Bodega (Local Store)|Projects_Store]]<br> [[Basketball Court|Projects_Court]]<br> <<if $active_job isnot null>> <br><strong>Active Contract:</strong><br> <<link `"Look for your target (" + $active_job.name + ")"`>> <<set $location_attempt to "Projects">> /* <- CHANGEZ CECI SELON LE QUARTIER */ <<goto "DarkWeb_Job_Resolution">> <</link>><br> <</if>> [[Get in a car chase|CarChase_Minigame]] <br> [[Look for drug deals|Drug_Market]] <br> [[Back to City Map|City_Hub]] <br> <</nobr>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/basketball.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <h3>The Basketball Court</h3> The chain-link fence rattles as someone misses a dunk. The court is cracked, and the nets are long gone, but it's the heart of the Projects. A few locals are running a rough pickup game. <strong>Your Stamina:</strong> $stamina / $maxstamina --- <strong>Activities:</strong> <<if $stamina >= 30>> <<link "Play a pickup game (Costs 30 Stamina, takes 1 hour)">> <<set _oldTime to $time>> <<set $time += 60>> <<set $stamina -= 30>> /* On incrémente juste le compteur d'entraînement */ <<set $counters.basketball_training += 1>> <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Projects_Court_Training">> <</if>> <</link>> <<else>> //You are too exhausted to play. You need to rest or drink an Energy Drink.// <</if>> <<link "Pick a fight with a thug">> <<set $combat_log to "">> /* Création des statistiques de l'ennemi */ <<set $enemy to { name: "Street Thug", max_hp: random(30,120), strength: random(1,5) }>> <<set $enemy.hp to $enemy.max_hp>> <<goto "Combat_Main">> <</link>> <br> [[Leave the court|Projects]]
<h3>Sweat and Concrete</h3> You jump into a pickup game. It's rough, physical, and fast-paced. You spend an hour running up and down the cracked asphalt, fighting for rebounds and taking elbows to the ribs. You feel exhausted but invigorated by the workout. --- <<link "Catch your breath">><<goto "Projects_Court">><</link>>
The bell dings as you enter the Bodega. The shelves are packed with cheap food, cigarettes, and everyday items. The cashier looks at you with suspicion. **Your Wallet:** $money --- ### Items for Sale **Energy Drink** - $10 *(Restores 20 Stamina)* Current stock: $inventory.energy_drink <<if $money >= 10>> <<link "Buy Energy Drink">> <<set $money -= 10>> <<set $inventory.energy_drink += 1>> <<goto "Projects_Store">> <</link>> <</if>> <br> **Pack of Cigarettes** - $20 *(Useful for bribes or trading)* Current stock: $inventory.cigarettes <<if $money >= 20>> <<link "Buy Cigarettes">> <<set $money -= 20>> <<set $inventory.cigarettes += 1>> <<goto "Projects_Store">> <</link>> <</if>> <br> **Can of Beer** - $10 *(A simple beer, in a can)* Current stock: $inventory.beer <<if $money >= 10>> <<link "Buy a Beer ($10)">> <<set $money -= 10>> <<set $inventory.beer += 1>> <<goto "Projects_Store">> <</link>><br> <</if>> **Box Cutter** - $30 *(A basic tool, but sharp enough to slice someone in a street fight)* <<if $inventory.weapons.includes("box_cutter")>> [Already Owned] <<elseif $money >= 30>> <<link "Buy Box Cutter">> <<set $money -= 30>> <<run $inventory.weapons.push("box_cutter")>> <<goto "Projects_Store">> <</link>> <<else>> [Insufficient funds] <</if>> --- [[Leave the store|Projects]]
How did your incarceration go? [[I spent all my time pumping iron. ->Question3][$strength += 1]] [[I read every book I could get my hands on in the library. ->Question3][$intelligence += 1]] [[I ran the contraband ring and built a network. ->Question3][$charisma += 1]]
What were you like in your youth? [[I was constantly getting into street fights. ->City_Hub][$strength += 1]] [[I was a brilliant student before taking a wrong turn. ->City_Hub][$intelligence += 1]] [[I was the center of attention, always charming my way through things. ->City_Hub][$charisma += 1]]
<h3>Alleyway - Defeat</h3> Everything goes black. You wake up hours later, dumped in a trash-filled alley outside the warehouse. Your body aches all over. You check your pockets—your wallet is significantly lighter. The gang took what they could and tossed you out like garbage. Worse, when you look at the warehouse doors, they are padlocked from the outside. They moved <<print $network_girls[$rescue_target_index].name>> to another secure location within the area. She's still missing, and the clock is ticking. /* --- PÉNALITÉS DE DÉFAITE --- */ /* Le joueur perd 20% de son argent en poche */ <<set _lostCash to Math.floor($money * 0.2)>> <<set $money -= _lostCash>> /* Fixer l'endurance ou la santé à un niveau critique (à adapter selon tes variables de combat) */ <<set $stamina to 10>> <span style="color: #ff4444;"><strong>Defeat:</strong> You were beaten and robbed of $<<print _lostCash>>.</span> <br><br> /* Nettoyage de la variable temporaire */ <<unset $rescue_target_index>> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<link "Limp away">><<goto $current_location>><</link>>
<h3>Gang Hideout - Victory</h3> You wipe the blood from your knuckles. The thugs are groaning on the floor, completely broken. You take a moment to rifle through their pockets, grabbing a handful of cash before walking over to <<print $network_girls[$rescue_target_index].name>>. You cut her ties. She's trembling but unhurt. "Let's go home," you tell her. /* --- RÉCOMPENSE DE COMBAT --- */ <<set _loot to random(150, 400)>> <<set $money += _loot>> <span style="color: #00ffaa;"><strong>Loot:</strong> You found $<<print _loot>> on the thugs.</span> <br><br> <span style="color: #00ffaa;"><strong>Success!</strong> You rescued your employee.</span> /* --- RESTAURATION DE LA FILLE --- */ <<set $network_girls[$rescue_target_index].status to "active">> <<set $network_girls[$rescue_target_index].location to "hideout">> <<set $network_girls[$rescue_target_index].days_in_trouble to 0>> <<addXP 100>> /* Nettoyage de la variable temporaire */ <<unset $rescue_target_index>> <br><br> <<set $combat_return_victory to "Combat_Win">> <<set $combat_return_defeat to "Combat_Lose">> <<link "Leave the warehouse">><<goto $current_location>><</link>>
<<showSexImage>> <<nobr>> $sex_log <br><br> You catch your breath as she cleans herself up. She gets dressed, gives you a kiss on the cheek, and leaves. <br> <<set _oldTime to $time>> <<set $time += 15>> /* Le temps qu'elle parte */ <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<link "Pass out">><<goto "Pass_Out">><</link>> <<elseif $escort_job is true>> <<if $escort_time_spent >= $escort_time_required>> /* --- CALCUL DES BONUS --- */ <<set _tip_money to 0>> <<set _tip_xp to 0>> <<set _feedback to "">> <<if $escort_pref_action_done >=3>> <<set _tip_money += $escort_pref_action_done * 10>> <<set _tip_xp += 5>> <<set _feedback += " She absolutely loved that you paid attention to her favorite kink." >> <</if>> <<if $sex_action is $escort_pref_finish>> <<set _tip_money += 60>> <<set _tip_xp += 5>> <<set _feedback += " Giving her exactly the finish she wanted pushed her over the edge!" >> <</if>> /* --- AFFICHAGE DU RÉSULTAT --- */ <<if _tip_money > 0>> <strong>Contract Fulfilled (Exceptional Service)!</strong> The client is exhausted and completely blown away by your performance.<<print _feedback>> She transfers the full amount plus a generous tip!<br> <<else>> <strong>Contract Fulfilled!</strong> The client is satisfied and transfers the full amount.<br> <</if>> <<set $money += $escort_payout + _tip_money>> <<set $counters.escort_clients += 1>> <<addXP 10 + _tip_xp>> <span style="color: #00ffaa;">Earned: <strong>$<<print $escort_payout>></strong></span> <<if _tip_money > 0>> <span style="color: #ffaa00;"> (+ <strong>$<<print _tip_money>></strong> Tip)</span> <</if>><br> <<link "Rest and return to your activities">> <<goto $current_location>> <</link>> <<else>> <strong>Contract Failed!</strong> "Is that it? We agreed on at least $escort_time_required minutes!" The client is furious and only pays you half of what was promised.<br> <<set _penalty_payout to Math.floor($escort_payout / 2)>> <<set $money += _penalty_payout>> <span style="color: #ff4444;">Earned: <strong>$<<print _penalty_payout>></strong></span><br> <<link "Rest and return to your activities">> <<goto $current_location>> <</link>> <</if>> /* On nettoie la variable du contrat */ <<set $escort_job to false>> <<else>> <<link "Rest and return to your activities">> <<set $room_result to "You feel incredibly relaxed after the escort's visit.">> <<goto $current_location>> <</link>> <</if>> <</nobr>>
<<nobr>> <<if $sex_action is undefined or $sex_action is "">> <<set $sex_action to "TEASE">> <</if>> <<set _type to $sex_eth>> <<if setup.sex_limits[_type] is undefined>> <<set _type to "white">> <</if>> /* On stocke les limites dans une variable courte pour éviter les erreurs de frappe */ <<set _lim to setup.sex_limits[_type]>> <<showSexImage>> <<if $sex_log isnot "">> $sex_log <br>---<br> <</if>> <<if $escort_job is true>> <div style="background-color: #222; border: 1px solid #ff44aa; padding: 5px; text-align: center; margin-bottom: 10px;"> <strong>Escort Contract:</strong> Time logged: $escort_time_spent / $escort_time_required mins </div> <</if>> <strong>What do you want to do? (Takes 15 minutes)</strong><br><br> <<if $stamina <= 0>> /* --- ÉTAT D'ÉPUISEMENT --- */ <div style="background-color: #331111; border: 2px solid #ff4444; padding: 15px; text-align: center; margin-bottom: 20px;"> <h3 style="color: #ff4444; margin-top: 0;">Exhausted</h3> You are completely out of breath and don't have the energy to continue. You have to stop right now. <br><br> <<link "Pull out and stop">> <<set $sex_action to "FACIAL">> /* On met une action neutre pour éviter les bugs d'image */ <<goto "Sex_Climax">> <</link>> </div> <<else>> <strong>Foreplay:</strong><br> <<if _lim["TEASE"] !== undefined and _lim["TEASE"] > 0>> <<link "Tease">><<set $sex_action to "TEASE">><<set $sex_log to "You take your time, teasing and enjoying the view.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["GROPING"] !== undefined and _lim["GROPING"] > 0>> <<link "Grope">><<set $stamina -= 5>><<set $sex_action to "GROPING">><<set $sex_log to "You get hands-on, grabbing and squeezing.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["solo"] !== undefined and _lim["solo"] > 0>> <<link "Watch her (Solo)">><<set $sex_action to "solo">><<set $sex_log to "You sit back and let her put on a show.">><<goto "Sex_Turn">><</link>> <</if>> <br><br> <strong>Fingering & Eating:</strong><br> <<if _lim["FINGER"] !== undefined and _lim["FINGER"] > 0>> <<link "Finger her">><<useSexStamina 5>><<set $sex_action to "FINGER">><<set $sex_log to "You slip your fingers inside her.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["CUNI"] !== undefined and _lim["CUNI"] > 0>> <<link "Cunnilingus">><<useSexStamina 5>><<set $sex_action to "CUNI">><<set $sex_log to "You taste her, making her moan.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["ANFINGER"] !== undefined and _lim["ANFINGER"] > 0>> <<link "Anal play">><<useSexStamina 5>><<set $sex_action to "ANFINGER">><<set $sex_log to "You play with her backdoor.">><<goto "Sex_Turn">><</link>> <</if>> <br><br> <strong>Oral & Manual:</strong><br> <<if _lim["BJ"] !== undefined and _lim["BJ"] > 0>> <<link "Blowjob">><<useSexStamina 5>><<set $sex_action to "BJ">><<set $sex_log to "She goes down on you.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["HJ"] !== undefined and _lim["HJ"] > 0>> <<link "Handjob">><<useSexStamina 5>><<set $sex_action to "HJ">><<set $sex_log to "She uses her hands to stroke you.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["TITJOB"] !== undefined and _lim["TITJOB"] > 0>> <<link "Titjob">><<useSexStamina 5>><<set $sex_action to "TITJOB">><<set $sex_log to "She presses you between her breasts.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["FOOT"] !== undefined and _lim["FOOT"] > 0>> <<link "Footjob">><<useSexStamina 5>><<set $sex_action to "FOOT">><<set $sex_log to "She uses her feet to please you.">><<goto "Sex_Turn">><</link>> <</if>> <br><br> <<if _lim["SHOWER"] !== undefined and _lim["SHOWER"] > 0>> <strong>Shower:</strong> <<link "Shower together">><<useSexStamina 5>><<set $sex_action to "SHOWER">><<set $sex_log to "You take things to the shower.">><<goto "Sex_Turn">><</link>> <br><br> <</if>> <strong>Penetration:</strong><br> <<if _lim["VG"] !== undefined and _lim["VG"] > 0>> <<link "Vaginal">><<useSexStamina 10>><<set $sex_action to "VG">><<set $sex_log to "You push inside her pussy, establishing a strong rhythm.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["AN"] !== undefined and _lim["AN"] > 0>> <<link "Anal">><<useSexStamina 10>><<set $sex_action to "AN">><<set $sex_log to "You take her from behind, exploring her backdoor.">><<goto "Sex_Turn">><</link>> <</if>> <br><br> <strong>Rough Sex:</strong><br> <<if _lim["RVG"] !== undefined and _lim["RVG"] > 0>> <<link "Vaginal">><<useSexStamina 15>><<set $counters.rough+=1>><<set $sex_action to "RVG">><<set $sex_log to "You ravage her pussy, pushing her to the brim.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["RAN"] !== undefined and _lim["RAN"] > 0>> <<link "Anal">><<useSexStamina 15>><<set $counters.rough+=1>><<set $sex_action to "RAN">><<set $sex_log to "You destroy her asshole, leaving it gaping for days.">><<goto "Sex_Turn">><</link>> <</if>> <<if _lim["FF"] !== undefined and _lim["FF"] > 0>> <<link "Face Fuck">><<useSexStamina 15>><<set $counters.rough+=1>><<set $sex_action to "FF">><<set $sex_log to "You take her throat for yourself, turning it into a mess.">><<goto "Sex_Turn">><</link>> <</if>> <br><br> --- <br> <strong>Finish her:</strong><br> <<if _lim["CREAMPIE"] !== undefined and _lim["CREAMPIE"] > 0>> <<link "Creampie">><<set $sex_action to "CREAMPIE">><<set $sex_log to "You pull her close and finish deep inside her pussy.">><<goto "Sex_Climax">><</link>> <</if>> <<if _lim["ANCREAMPIE"] !== undefined and _lim["ANCREAMPIE"] > 0>> <<link "Anal Creampie">><<set $sex_action to "ANCREAMPIE">><<set $sex_log to "You finish deep inside her ass.">><<goto "Sex_Climax">><</link>> <</if>> <<if _lim["FACIAL"] !== undefined and _lim["FACIAL"] > 0>> <<link "Facial">><<set $sex_action to "FACIAL">><<set $sex_log to "You pull out and coat her pretty face.">><<goto "Sex_Climax">><</link>> <</if>> <<if _lim["CUMBODY"] !== undefined and _lim["CUMBODY"] > 0>> <<link "Cum on Body">><<set $sex_action to "CUMBODY">><<set $sex_log to "You stroke yourself and finish all over her body.">><<goto "Sex_Climax">><</link>> <</if>> <</if>> <</nobr>>
/* On avance le temps de 5 minutes par action */ <<set _oldTime to $time>> <<set $time += 15>> <<if $escort_job is true>> <<set $escort_time_spent += 15>> <</if>> <<if $escort_job is true and $sex_action is $escort_pref_action>> <<set $escort_pref_action_done +=1>> <</if>> /* Vérification du Pass Out (Si le joueur y passe la nuit entière !) */ <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto "Sex_Main">> <</if>>
<div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img src="images/bg/slums.jpg" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> You are in the Slums. The stench of uncollected garbage and desperation hangs heavy in the damp air. Makeshift shelters and crumbling brick walls crowd the narrow, labyrinthine alleyways. The few working streetlights buzz with a sickly, flickering yellow glow, while unseen eyes watch your every move from the shadows. <<nobr>> <<if $owned_vehicles.includes("Utility Van") and $garage_level > 0 and $basement_level > 0>> <br> [[Prowl the streets for targets (Takes 1 hour)|Kidnap_Encounter]]<br> <</if>> <<if $garage_level > 0>> [[Look for an easy carjack|Action_CarTheft]]<br> <</if>> [[The Red Lantern Brothel|Slums_Brothel]]<br> [[Back-Alley Chop Shop|Chop_Shop]]<br> <<if $email_armory_low_read is true>> <<link "Enter the Ironclad Surplus (Low-Tier Armory)">><<goto "Location_Armory_Low">><</link>><br> <</if>> <<if $active_job isnot null>> <br><strong>Active Contract:</strong><br> <<link `"Look for your target (" + $active_job.name + ")"`>> <<set $location_attempt to "Slums">> <<goto "DarkWeb_Job_Resolution">> <</link>> <br> <</if>> /* --- RECHERCHE DE FILLES KIDNAPPÉES ICI --- */ <<set _kidnapped_here to []>> <<for _i to 0; _i < $network_girls.length; _i++>> <<if $network_girls[_i].status is "kidnapped" and $network_girls[_i].kidnap_location is $current_location>> <<run _kidnapped_here.push({ index: _i, girl: $network_girls[_i] })>> <</if>> <</for>> <<if _kidnapped_here.length > 0>> <div style="background-color: #222; padding: 10px; border-left: 3px solid #ffaa00; margin-bottom: 20px;"> <strong>Rival Gang Hideout Spotted!</strong><br> You have intel that your missing employees are being held in an abandoned building nearby. <br><br> <<for _j to 0; _j < _kidnapped_here.length; _j++>> <<set _target to _kidnapped_here[_j]>> <<capture _target>> <<link "Rescue _target.girl.name from the gang">> <<set $rescue_target_index to _target.index>> <<goto "Action_RescueKidnapped">> <</link>><br> <</capture>> <</for>> </div> <</if>> <<if $empire_properties && $empire_properties.traphouse && ($empire_properties.traphouse.owned or $empire_properties.traphouse.rented)>> [[🏚️ Slums Trap House|Property_TrapHouse]]<br> <</if>> [[Look for drug deals|Drug_Market]]<br> [[Back to City Map|City_Hub]] <</nobr>>
<h3>The Red Lantern Brothel</h3> The air inside is thick with cheap perfume and cigar smoke. Dim red lights illuminate a worn lounge where several working girls wait for clients. In the back, the Madame, a tough woman with cold eyes, watches over the business. <strong>Your Wallet:</strong> $ $money --- <<if $brothel_log isnot "">> $brothel_log <br>---<br> <</if>> <strong>Services:</strong><br><br> <<link "Hire a Working Girl (1 Hour, $150)">> <<if $money >= 150>> <<set $money -= 150>> <<set $current_location to "Slums_Brothel">> /* REMPLACEZ CECI PAR LE NOM DE VOTRE PASSAGE D'ESCORTE */ <<goto "Brothel_Choice">> <<else>> <<set $brothel_log to "The bouncer blocks your path. 'No money, no honey.'">> <<goto "Slums_Brothel">> <</if>> <</link>><br><br> <strong>Business with the Madame:</strong><br><br> /* Calcul du jour actuel (1 jour = 1440 minutes) */ <<set _currentDay to Math.floor($time / 1440)>> /* Vérification du délai de 7 jours */ <<if _currentDay >= $last_girl_sold_day + 7>> <<if $basement_captives.length > 0>> <<link "Offer to sell a captive to the Madame">> <<goto "Brothel_Sell_List">> <</link>><br> <<else>> //You have no captives to sell to the Madame right now.//<br> <</if>> <<else>> <<set _daysLeft to ($last_girl_sold_day + 7) - _currentDay>> //"I don't want the cops sniffing around. Come back in _daysLeft day(s) if you have fresh merchandise," the Madame says without looking up.//<br> <</if>> <br>---<br> <<link "Leave the brothel and return to the streets">> <<set $brothel_log to "">> <<goto "Slums">> <</link>>
<div style="text-align: center; margin-bottom: 25px; padding: 20px; background: rgba(0,0,0,0.5); border-radius: 8px; border: 1px solid #333;"> <h1 style="color: #ff4444; margin: 0; font-size: 2.4em; letter-spacing: 3px; text-shadow: 0 0 15px rgba(255, 68, 68, 0.4);">CRIME LORDS</h1> <span style="color: #888; font-size: 0.9em; letter-spacing: 1px; text-transform: uppercase;">v0.0.1 Alpha</span> </div> <div style="max-width: 450px; margin: 0 auto; background: #161616; padding: 20px; border-radius: 6px; border-left: 3px solid #ff4444;"> <p><strong>Enter Your Name:</strong><br><<textbox "$name" $name autofocus>></p> <p><strong>Enter the City Name:</strong><br><<textbox "$city" $city>></p> <br> <div style="text-align: right;"> [[Begin Journey →|Exposition]] </div> </div>
<<displayTime>> <<nobr>> /* Auto-heal older saves */ <<if $empire_properties === undefined>> <<set $empire_properties to { hangar: { owned: false, capacity: 10, level: 1 }, brothel: { owned: false, capacity: 5, level: 1, lobbying_done: false }, escort: { owned: false, capacity: 3, level: 1 }, traphouse: { owned: false, rented: false, level: 1 }, growhouse: { owned: false, rented: false, level: 1 }, chemlab: { owned: false, rented: false, level: 1 } }>> <<else>> <<if $empire_properties.traphouse === undefined>><<set $empire_properties.traphouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.growhouse === undefined>><<set $empire_properties.growhouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.chemlab === undefined>><<set $empire_properties.chemlab to { owned: false, rented: false, level: 1 }>><</if>> <</if>> <<if $grow_house === undefined>> <<set $grow_house to { crop_active: false, strain: "none", planted_day: -1, grow_days_needed: 2, harvest_qty: 0, ready: false }>> <</if>> <<if $traphouse_stash === undefined>> <<set $traphouse_stash to { money: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> <</if>> <<if $inventory !== undefined>> <<if $inventory.baking_soda === undefined>><<set $inventory.baking_soda to 0>><</if>> <<if $inventory.cutting_agent === undefined>><<set $inventory.cutting_agent to 0>><</if>> <<if $inventory.pill_binders === undefined>><<set $inventory.pill_binders to 0>><</if>> <<if $inventory.rolling_papers === undefined>><<set $inventory.rolling_papers to 0>><</if>> <<if $inventory.weed_seeds_skunk === undefined>><<set $inventory.weed_seeds_skunk to 0>><</if>> <<if $inventory.weed_seeds_haze === undefined>><<set $inventory.weed_seeds_haze to 0>><</if>> <<if $inventory.weed_seeds_kush === undefined>><<set $inventory.weed_seeds_kush to 0>><</if>> <</if>> /* --- SYSTÈME DE RÉPUTATION & TITRES --- */ <<if $rep_level isnot undefined>> /* Tableau des 15 titres (le premier mot "None" est pour le niveau 0 qui n'existe pas) */ <<set _titles to [ "None", "Street Rat", "Small Fry", "Petty Thief", "Crook", "Hustler", "Thug", "Grunt", "Fixer", "Enforcer", "Mercenary", "Operator", "Ringleader", "Mastermind", "Crime Lord", "Kingpin" ]>> /* On s'assure que l'index ne dépasse jamais 15 (même si le joueur atteint le niveau 16 ou 20) */ <<set _titleIndex to Math.clamp($rep_level, 1, 15)>> <<set _repTitle to _titles[_titleIndex]>> <br> <strong>Reputation: Lv.$rep_level</strong> <span style="font-size:0.9em; color:#ffaa00;">(_repTitle)</span> /* Calcul du pourcentage de la barre d'XP */ <<set _xpPercent to Math.floor(($rep_xp / $rep_next_level) * 100)>> /* Affichage de la barre de progression */ <div style="background-color: #111; border: 1px solid #444; border-radius: 5px; height: 14px; width: 100%; margin-top: 5px; overflow: hidden;"> <div @style="'background-color: #ffaa00; height: 100%; width: ' + _xpPercent + '%; transition: width 0.5s ease;'"></div> </div> <div style="font-size: 0.8em; text-align: right; color: #888; margin-bottom: 10px;"> $rep_xp / $rep_next_level XP </div> <</if>> <strong>Statistics</strong> <br><br> <<if $in_prison is true>> <span style="color: #ff4444;"><strong>[ INCARCERATED ]</strong></span><br> Sentence: $prison_days_left days left<br> Cigarettes: <span style="color: #00aaff;">$inventory.cigarettes</span><br> <<else>> Money: $<<print $money>> <br> <<if $laundered_money > 0>> Offshore (Clean): <span style="color: #00ffaa;">$<<print $laundered_money>></span><br> <</if>> <</if>> HP: $hp / $maxhp <br> Stamina: $stamina / $maxstamina <br> Strength: $strength <br> Intelligence: $intelligence <br> Charisma: $charisma <br> <<if $heat is undefined>><<set $heat to 0>><</if>> <<set _heatColor to ($heat >= 50 ? "#ff4444" : ($heat >= 10 ? "#ffaa00" : "#00ffaa"))>> Heat: <strong @style="'color: ' + _heatColor + ';'"><<print $heat>>%</strong> <<if $heat < 10>><span style="font-size: 0.75em; color: #888;">(Low)</span><<elseif $heat < 50>><span style="font-size: 0.75em; color: #ffaa00;">(Watched)</span><<else>><span style="font-size: 0.75em; color: #ff4444;">(Critical!)</span><</if>> <div style="background-color: #111; border: 1px solid #444; border-radius: 4px; height: 8px; width: 100%; margin-top: 3px; margin-bottom: 6px; overflow: hidden;"> <div @style="'background-color: ' + _heatColor + '; height: 100%; width: ' + Math.clamp($heat, 0, 100) + '%; transition: width 0.4s ease;'"></div> </div> <br> <strong>Loadout:</strong> <div style="display: flex; justify-content: space-between; margin-top: 10px; border-top: 1px solid #444; padding-top: 10px;"> <!-- MELEE --> <div style="flex: 1; text-align: center; border-right: 1px solid #444; padding-right: 5px;"> <span style="font-size: 0.8em; color: #ffaa00; text-transform: uppercase;">Melee</span><br> <<if $in_prison is true>> <<if $inventory.shank > 0>> <br><span style="color: #ff4444; font-size: 0.8em;">Prison Shank (x$inventory.shank)</span> <<else>> <br><span style="color: #555; font-size: 0.8em;">Unarmed</span> <</if>> <<elseif $active_melee isnot "none" and $active_melee isnot undefined>> <img @src="'images/weapons/' + $active_melee + '.png'" style="max-width: 100%; height: auto; border: 1px solid #ffaa00; border-radius: 3px; margin-top: 5px;"> <br><span style="font-size: 0.75em;"><<print $weapon_db[$active_melee].name>></span> <<else>> <br><span style="color: #555; font-size: 0.8em;">Unarmed</span> <</if>> </div> <!-- FIREARM --> <div style="flex: 1; text-align: center; padding-left: 5px;"> <span style="font-size: 0.8em; color: #ff4444; text-transform: uppercase;">Firearm</span><br> <<if $in_prison is false and $active_firearm isnot "none" and $active_firearm isnot undefined>> <img @src="'images/weapons/' + $active_firearm + '.png'" style="max-width: 100%; height: auto; border: 1px solid #ff4444; border-radius: 3px; margin-top: 5px;"> <br><span style="font-size: 0.75em;"><<print $weapon_db[$active_firearm].name>></span> <br><span id="sidebar-ammo-status"> <span style="font-size: 0.7em; color: #ffaa00;">Mag: $gun_mag/<<print $weapon_db[$active_firearm].mag_size>> | Res: $inventory.ammo</span> <<if !["Gunfight_Main", "Gunfight_Turn", "Combat_Main", "Combat_Turn"].includes(passage()) and $gun_mag < $weapon_db[$active_firearm].mag_size and $inventory.ammo > 0>> <br><span style="font-size: 0.72em;"><<link "[ 🔄 Reload ]">> <<set $gun_max_mag to $weapon_db[$active_firearm].mag_size>> <<set _needed to $gun_max_mag - $gun_mag>> <<set _toLoad to Math.min(_needed, $inventory.ammo)>> <<set $gun_mag += _toLoad>> <<set $inventory.ammo -= _toLoad>> <<replace "#sidebar-ammo-status">> <span style="font-size: 0.7em; color: #ffaa00;">Mag: $gun_mag/<<print $weapon_db[$active_firearm].mag_size>> | Res: $inventory.ammo</span> <br><span style="font-size: 0.68em; color: #00ffaa;">✓ Reloaded</span> <</replace>> <<if passage() is "Player_Loadout" or passage() is "Inventory">> <<goto `passage()`>> <</if>> <</link>></span> <</if>> </span> <<else>> <br><span style="color: #555; font-size: 0.8em;">None</span> <</if>> </div> </div> <div style="text-align: center; margin-top: 8px; border-top: 1px solid #333; padding-top: 8px;"> <span style="font-size: 0.8em; color: #00aaff; text-transform: uppercase;">Outfit</span><br> <<if $in_prison is true>> <span style="color: #ff8800; font-size: 0.8em;">Prison Jumpsuit</span> <<elseif $active_outfit isnot "none" and $active_outfit isnot undefined and $outfit_db isnot undefined and $outfit_db[$active_outfit] isnot undefined>> <img @src="'images/outfits/' + $active_outfit + '.jpg'" onerror="if(this.src.indexOf('.jpg')!==-1){this.src=this.src.replace('.jpg','.png');}else{this.style.display='none';}" style="max-width: 85px; height: auto; border: 1px solid #00aaff; border-radius: 3px; margin-top: 4px;"> <br><span style="font-size: 0.75em; color: #eee;"><<print $outfit_db[$active_outfit].name>></span> <br><span style="font-size: 0.68em; color: #00ffaa;"><<print $outfit_db[$active_outfit].bonus_text>></span> <<else>> <span style="color: #555; font-size: 0.8em;">Basic Street Clothes</span> <</if>> </div> <br> <<if !["Inventory", "Perks", "Phone_Main", "Phone_EmpireApp", "Phone_EscortApp", "War_Raid_Hub", "War_Assault_Start", "War_Assault_Win", "Gunfight_Main", "Gunfight_Turn", "Combat_Main", "Combat_Turn", "Combat_Win", "Combat_Lose", "CarChase_Minigame", "Minigame_Hotwire", "Action_HangarMinigame"].includes(passage())>> <<set $menu_return_passage to passage()>> <</if>> <<if passage() is "Casino_Blackjack" and $bj_state is "player_turn">> <div style="background-color: #2a1111; border: 1px solid #ff4444; padding: 6px; text-align: center; font-size: 0.78em; color: #ffaa00; border-radius: 4px;"> 🃏 <em>Finish your active Blackjack hand before leaving the table.</em> </div> <<elseif ["War_Raid_Hub", "War_Assault_Start", "Gunfight_Main", "Gunfight_Turn", "Combat_Main", "Combat_Turn", "CarChase_Minigame"].includes(passage())>> <div style="background-color: #2a1111; border: 1px solid #ff4444; padding: 6px; text-align: center; font-size: 0.78em; color: #ffaa00; border-radius: 4px;"> ⚔️ <em>Finish your current combat engagement first.</em> </div> <<else>> <<if $in_prison is false and $has_phone is true>> <<button "Smartphone">><<goto "Phone_Main">><</button>> <</if>> <<button "Open Inventory">><<goto "Inventory">><</button>> <<button "Character Perks">><<goto "Perks">><</button>> /* --- BOUTONS D'EXPLORATION --- */ <<if $in_prison is false and tags().includes("exploration")>> <hr style="border: 0; border-top: 1px solid #444; margin-bottom: 15px;"> <<button "Return to Apartment">> <<set $destination to "Home">> <<goto "Travel_Handler">> <</button>> <</if>> <</if>> <</nobr>>
<<nobr>> <<if $empire_properties === undefined>> <<set $empire_properties to { hangar: { owned: false, capacity: 10, level: 1 }, brothel: { owned: false, capacity: 5, level: 1, lobbying_done: false }, escort: { owned: false, capacity: 3, level: 1 }, traphouse: { owned: false, rented: false, level: 1 }, growhouse: { owned: false, rented: false, level: 1 }, chemlab: { owned: false, rented: false, level: 1 } }>> <<else>> <<if $empire_properties.traphouse === undefined>><<set $empire_properties.traphouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.growhouse === undefined>><<set $empire_properties.growhouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.chemlab === undefined>><<set $empire_properties.chemlab to { owned: false, rented: false, level: 1 }>><</if>> <</if>> <<if $grow_house === undefined>> <<set $grow_house to { crop_active: false, strain: "none", planted_day: -1, grow_days_needed: 2, harvest_qty: 0, ready: false }>> <</if>> <<if $traphouse_stash === undefined>> <<set $traphouse_stash to { money: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> <</if>> <<if $inventory !== undefined>> <<if $inventory.baking_soda === undefined>><<set $inventory.baking_soda to 0>><</if>> <<if $inventory.cutting_agent === undefined>><<set $inventory.cutting_agent to 0>><</if>> <<if $inventory.pill_binders === undefined>><<set $inventory.pill_binders to 0>><</if>> <<if $inventory.rolling_papers === undefined>><<set $inventory.rolling_papers to 0>><</if>> <<if $inventory.weed_seeds_skunk === undefined>><<set $inventory.weed_seeds_skunk to 0>><</if>> <<if $inventory.weed_seeds_haze === undefined>><<set $inventory.weed_seeds_haze to 0>><</if>> <<if $inventory.weed_seeds_kush === undefined>><<set $inventory.weed_seeds_kush to 0>><</if>> <</if>> <</nobr>>
<<set $money to 150>> <<set $daily_earned to 0>> <<set $daily_spent to 0>> <<set $nightly_earned to 0>> <<set $nightly_spent to 0>> <<set $last_tracked_money to 150>> <<set $wake_location to "Home">> <<set $last_billing_day to 0>> <<set $stamina to 100>> <<set $hp to 100>> <<set $rep_level to 1>> <<set $rep_xp to 0>> <<set $rep_next_level to 100>> /* XP requis pour le niveau 2 */ <<set $stat_points to 0>> /* Points à dépenser */ <<set $maxhp to 100>> <<set $maxstamina to 100>> <<set $temps to 0>> <<set $strength to 1>> <<set $intelligence to 1>> <<set $charisma to 1>> <<set $reputation to 0>> <<set $name to "John Sex">> <<set $city to "Brest-Nevez">> <<set $has_gym_membership to false>> <<set $last_gym_time to -1000>> /* Permet de s'entraîner dès le premier jour */ <<set $last_coach_day to -1>> <<set $last_yoga_day to -1>> <<set $gym_log to "">> /* Temps en minutes (480 = 8h00) */ <<set $time to 480>> <<set $current_location to "Projects">> <<set $combat_log to "">> <<set $slot_result to "">> <<set $bar_result to "">> <<set $hotel_lobby_result to "">> <<set $hotel_bar_result to "">> <<set $has_hotel_room to false>> <<set $hotel_shower_used to false>> <<set $room_result to "">> <<set $drunk_units to 0>> <<set $drunk_int_penalty to false>> <<set $drunk_str_bonus to false>> <<set $bank_loan to 0>> <<set $bank_interest_rate to random(2, 10)>> <<set $bank_rate_timer to 5>> <<set $bank_days_left to 0>> <<set $bank_result to "">> <<set $auction_unlocked to false>> <<set $email_auction_read to false>> <<set $auction_sales_today to 0>> <<set $auction_pool to []>> <<set $auction_last_refresh to -7>> /* Forcé à -7 pour générer la liste à la première visite */ <<set $auction_tab to "buy">> <<set $heat to 0>> /* Va de 0 à 100 */ <<set $black_swan_count to 0>> /* Compte le nombre de crises vécues */ <<set $agency_email_read to false>> /* Pour déclencher la quête */ <<set $pr_agency_owned to false>> /* Pour plus tard */ <<set $last_girl_sold_day to -7>> /* À -7 pour pouvoir vendre dès le premier jour */ <<set $last_container_export_day to -7>> <<set $brothel_log to "">> /* 0 = Appartement miteux, 1 = Maison Outskirts, 2 = Penthouse */ <<if $player_housing is undefined>> <<set $player_housing to 0>> <</if>> <<set $player_housing_rented to false>> /* Variables du Dark Web (Petits boulots) */ <<set $last_darkweb_day to -1>> <<set $darkweb_jobs to []>> <<set $darkweb_log to "">> <<set $active_job to null>> <<set $district_list to ["Neon", "Financial", "Slums", "Port", "Outskirts"]>> /* Variables du Port */ <<set $port_log to "">> <<set $container_generated to false>> <<set $contraband_warehouse_owned to false>> <<set $contraband_warehouse_level to 1>> <<set $contraband_warehouse_capacity to 6>> <<set $contraband_broker_unlocked to false>> <<set $last_meridian_contract_day to -7>> <<set $meridian_hot_item to "Weapons">> <<set $meridian_payout_mode to "cash">> <<set $meridian_log to "">> <<set $meridian_contract_spec to { item: "Weapons", amount: 2, reward: 9600, completed: false }>> <<set $meridian_contract_bulk to { amount: 5, reward: 19500, completed: false }>> <<set $last_container_buy_day to -1>> <<set $smuggler_crate_timer to random(3, 7)>> /* Objets Permanents (Électronique) */ <<set $has_phone to false>> <<set $has_computer to false>> <<set $has_camera to false>> /* Véhicules */ <<set $owned_vehicles to []>> <<set $stolen_vehicles to []>> <<set $active_vehicle to "none">> <<set $dealership_result to "">> <<set $chop_shop_sales_this_week to 0>> <<set $stolen_car_candidate to "">> << set $hotwire_context to "">> <<set $has_hotwire_kit to false>> <<set $armory_low_unlocked to false>> <<set $email_armory_low_read to false>> <<set $armory_high_unlocked to false>> <<set $email_armory_high_read to false>> /* Escorting */ <<set $escort_requests to []>> /* --- RÉSEAU ET GESTION --- */ <<set $network_girls to []>> /* --- PROPRIÉTÉS DE L'EMPIRE --- */ /* capacity: places actuelles / level: pour les futurs upgrades */ <<set $empire_properties to { hangar: { owned: false, capacity: 10, level: 1 }, brothel: { owned: false, capacity: 5, level: 1, lobbying_done: false }, escort: { owned: false, capacity: 3, level: 1 }, traphouse: { owned: false, rented: false, level: 1 }, growhouse: { owned: false, rented: false, level: 1 }, chemlab: { owned: false, rented: false, level: 1 } }>> <<set $grow_house to { crop_active: false, strain: "none", planted_day: -1, grow_days_needed: 2, harvest_qty: 0, ready: false }>> <<set $traphouse_stash to { money: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> /* Variable pour retenir l'onglet ouvert sur le téléphone */ <<set $current_empire_tab to "staff">> /* 0 = Armes de mêlée/Pistolets basiques, 1 = SMG, 2 = Fusils d'assaut, 3 = Matériel Militaire */ <<if $gang_armory is undefined>> <<set $gang_armory to 0>> <</if>> /* Inventaire de Contrebande (Port) */ <<set $container_stash to { "Weapons": 0, "Jewelry": 0, "Electronics": 0, "Chemicals": 0, "Luxury Goods": 0, "Car Parts": 0 }>> /* Liste des types possibles pour la génération aléatoire */ <<set $contraband_types to ["Weapons", "Jewelry", "Electronics", "Chemicals", "Luxury Goods", "Car Parts"]>> /* Système de Contrats du Cartel */ <<set $cartel_contract to { type: "none", amount: 0, reward: 0, completed: false }>> <<set $last_cartel_contract_day to -7>> /* Permet d'avoir un contrat disponible dès le premier jour */ <<set $cartel_log to "">> /* Le tableau principal du gang */ <<if $gang_members is undefined>> <<set $gang_members to []>> <</if>> /* Des listes de noms pour générer les recrues */ <<if $name_pool_thugs is undefined>> <<set $name_pool_thugs to ["Spike", "Brick", "Razor", "Grip", "Scar", "Buster", "Roach", "Tank", "Bruiser", "Fang", "Snake", "Bone", "Crusher", "Bullet", "Dagger", "Iron", "Slug", "Hammer", "Rat", "Dirt", "Rust", "Trash", "Grunt", "Crow", "Scab", "Shank", "Shiv", "Nail", "Knuckles", "Bash", "Thump", "Vulture", "Grime", "Rubble", "Goon", "Stitch", "Gore", "Chopper", "Bite", "Smash", "Riot", "Mug", "Flea", "Toad", "Worm", "Gutter", "Slag", "Crowbar", "Puck", "Stomp", "Snout", "Grudge", "Ruckus", "Scrap", "Choke", "Maul", "Pound", "Wreck", "Dirk", "Brawler"]>> <<set $name_pool_mercs to ["Viktor", "Cross", "Ghost", "Silas", "Kane", "Dante", "Viper", "Rex", "Kestrel", "Hawk", "Talon", "Wolf", "Striker", "Nova", "Zero", "Axel", "Blade", "Cipher", "Dallas", "Echo", "Falcon", "Hunter", "Igor", "Jax", "Kodiak", "Logan", "Maddox", "Nyx", "Orion", "Pyro", "Quinn", "Raven", "Slade", "Titan", "Vance", "Wraith", "Xander", "Yuri", "Zane", "Atlas", "Boris", "Carver", "Maverick", "Ronin", "Gunner", "Ryder", "Flint", "Steele", "Ilya", "Hades", "Bane", "Apex", "Onyx", "Spartan", "Nomad", "Havoc", "Rogue", "Sabre", "Vanguard", "Ranger", "Jester", "Outlaw", "Tempest", "Griffin", "Paladin", "Scythe"]>> <</if>> /* Inventaire de base */ /* Création du dictionnaire d'inventaire */ <<set $inventory to { energy_drink: 0, cigarettes: 0, beer: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0, baking_soda: 0, cutting_agent: 0, pill_binders: 0, rolling_papers: 0, weed_seeds_skunk: 0, weed_seeds_haze: 0, weed_seeds_kush: 0, ammo: 24, shank: 0, weapons: [], outfits: [] }>> <<set $active_melee to "none">> <<set $active_firearm to "none">> <<set $active_outfit to "none">> <<set $gun_mag to 0>> <<set $gun_max_mag to 0>> <<set $player_cover to 0>> <<set $enemy_suppressed to false>> /* Buffs temporaires de drogues (réinitialisés au sommeil) */ <<set $drug_buffs to { cocaine_int: 0, ecstasy_cha: 0, crack_str: 0, crack_cha: 0 }>> /* Économie avancée : Blanchiment, Chop Shop, Port */ <<set $laundered_money to 0>> <<set $laundering_level to 0>> <<set $laundering_fronts to { arcade: { owned: false, level: 1, capacity: 6 }, gallery: { owned: false, level: 1, capacity: 4 }, bank: { owned: false, level: 1, capacity: 2 } }>> <<set $last_apex_contract_day to -7>> <<set $apex_contracts to []>> <<set $apex_contract_completed to false>> <<set $chop_shop_owned to false>> <<set $chop_shop_level to 1>> <<set $driver_boost_timer to random(3, 7)>> <<set $harbor_smuggling_unlocked to false>> /* Système de Prison (Carceral Loop) */ <<set $in_prison to false>> <<set $prison_days_left to 0>> <<set $prison_sentence_total to 0>> <<set $prison_routine_step to "cell">> /* cell, canteen, yard, night */ <<set $prison_protection to "none">> <<set $prison_gang_rep to { aryan: 0, cartel: 0 }>> <<set $evidence_room to { active: false, money: 0, weapons: [], active_melee: "none", active_firearm: "none", ammo: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> /* Système de Guerre et Conquête de Territoires (Turf Wars) */ <<set $war_state to { active: false, target_district: "none", ambush_chance: 35, last_raid_day: -1, last_sabotage_day: -1, raid_wave: 0, assault_stage: 0 }>> <<set $war_op_log to "">> <<set $factions to { "Projects": { name: "18th Street Hustlers", control: 25, defense: 80, max_defense: 80, tribute: 250, conquered: false, boss: "Lil' Tim", supply_sabotaged: false, informant_turned: false }, "Slums": { name: "Iron Vein Syndicate", control: 10, defense: 120, max_defense: 120, tribute: 400, conquered: false, boss: "Rasputin", supply_sabotaged: false, informant_turned: false }, "Outskirts": { name: "The Highwaymen", control: 0, defense: 160, max_defense: 160, tribute: 550, conquered: false, boss: "Roadkill", supply_sabotaged: false, informant_turned: false }, "Port": { name: "Los Zetas Cartel", control: 0, defense: 210, max_defense: 210, tribute: 800, conquered: false, boss: "El Sicario", supply_sabotaged: false, informant_turned: false }, "Neon": { name: "Red Dragon Triads", control: 0, defense: 260, max_defense: 260, tribute: 1200, conquered: false, boss: "Madame Psylocke", supply_sabotaged: false, informant_turned: false }, "Financial": { name: "Corrupt Police Union", control: 0, defense: 320, max_defense: 320, tribute: 1800, conquered: false, boss: "Commander Rico", supply_sabotaged: false, informant_turned: false } }>> <<set $weapon_db to { "box_cutter": { name: "Box Cutter", type: "melee", damage: 2, price: 30 }, "brass_knuckles": { name: "Brass Knuckles", type: "melee", damage: 4, price: 80 }, "baseball_bat": { name: "Baseball Bat", type: "melee", damage: 6, price: 120 }, "switchblade": { name: "Switchblade", type: "melee", damage: 8, price: 300 }, "machete": { name: "Machete", type: "melee", damage: 15, price: 600 }, "katana": { name: "Black Market Katana", type: "melee", damage: 25, price: 2000 }, "zip_gun": { name: "Zip Gun (Homemade)", type: "firearm", damage: 15, mag_size: 2, price: 250 }, "revolver": { name: ".38 Revolver", type: "firearm", damage: 25, mag_size: 6, price: 1200 }, "pistol_9mm": { name: "9mm Glock", type: "firearm", damage: 35, mag_size: 12, price: 2500 }, "shotgun": { name: "Pump Shotgun", type: "firearm", damage: 85, mag_size: 6, price: 5000 }, "smg":{name: "MP5 SMG", type:"firearm", damage: 80, mag_size: 20, price: 10000}, "assault_rifle": { name: "Military Assault Rifle", type: "firearm", damage: 110, mag_size: 30, price: 18000 } }>> <<set $outfit_db to { "street_hoodie": { name: "Street Hoodie & Cargo Pants", tier: "0-5", min_level: 1, price: 350, str: 0, int: 0, cha: 0, hp: 0, sta: 5, bonus_text: "+5 Max Stamina", desc: "Heavy dark cotton hoodie with reinforced cargo pants. Blends into the Projects while giving you room to move." }, "tracksuit": { name: "Neon Hustler Tracksuit", tier: "0-5", min_level: 2, price: 650, str: 0, int: 0, cha: 1, hp: 0, sta: 0, bonus_text: "+1 Charisma", desc: "Flashy designer tracksuit with a gold chain. Street dealers and working girls respect the look immediately." }, "biker_jacket": { name: "Reinforced Leather Biker Jacket", tier: "0-5", min_level: 4, price: 1200, str: 1, int: 0, cha: 0, hp: 5, sta: 0, bonus_text: "+1 Strength, +5 Max HP", desc: "Thick, scuffed cowhide leather jacket that absorbs knife slashes and brass-knuckle blows during street brawls." }, "tactical_vest": { name: "Concealed Kevlar & Tactical Rig", tier: "5-8", min_level: 5, price: 5000, str: 0, int: 0, cha: 0, hp: 15, sta: 5, bonus_text: "+15 Max HP, +5 Max Stamina", desc: "Lightweight ballistic vest worn beneath a dark combat shirt. Essential protection when turf wars and gunfights erupt." }, "club_blazer": { name: "Neon Strip Designer Blazer", tier: "5-8", min_level: 6, price: 7000, str: 0, int: 1, cha: 1, hp: 0, sta: 0, bonus_text: "+1 Charisma, +1 Intelligence", desc: "Silk shirt with an open velvet blazer and luxury watch. Turns heads in VIP clubs, hotels, and high-end brothels." }, "fixer_trench": { name: "Syndicate Fixer Trenchcoat", tier: "5-8", min_level: 7, price: 9500, str: 0, int: 1, cha: 1, hp: 10, sta: 0, bonus_text: "+1 Intelligence, +1 Charisma, +10 Max HP", desc: "Tailored wool trenchcoat with hidden holsters and lined pockets. Projects cold, calculated authority in dark web and cartel meetings." }, "italian_suit": { name: "Bespoke Italian Three-Piece Suit", tier: "8-15", min_level: 8, price: 18000, str: 0, int: 1, cha: 2, hp: 0, sta: 10, bonus_text: "+2 Charisma, +1 Intelligence, +10 Max Stamina", desc: "Hand-stitched Milanese wool suit. You look like a billionaire hedge-fund shark rather than a street criminal." }, "enforcer_armor": { name: "Heavy Mercenary Exo-Coat", tier: "8-15", min_level: 10, price: 28000, str: 2, int: 0, cha: 0, hp: 25, sta: 10, bonus_text: "+2 Strength, +25 Max HP, +10 Max Stamina", desc: "Military-grade trauma plates sewn into a reinforced leather duster. Built for surviving cartel ambushes and full-scale district assaults." }, "kingpin_suit": { name: "Armored Kingpin Pinstripe Suit", tier: "8-15", min_level: 12, price: 45000, str: 1, int: 2, cha: 2, hp: 20, sta: 10, bonus_text: "+2 Charisma, +2 Intelligence, +1 Strength, +20 Max HP, +10 Max Stamina", desc: "The pinnacle of underworld power: a custom-tailored pinstripe suit woven with ultra-light carbon-kevlar fibers, paired with a platinum timepiece." } }>> /* Sécurité anti-crash pour le marché au démarrage */ <<set $market to { weed: {price: 0, sell: 0, qty: 0}, cocaine: {price: 0, sell: 0, qty: 0}, ecstasy: {price: 0, sell: 0, qty: 0}, crack: {price: 0, sell: 0, qty: 0}, heroin: {price: 0, sell: 0, qty: 0} }>> /* Dictionnaire des Traits */ <<set $traits to { sprinter: false, athletic: false, bulk_buyer: false, smooth_criminal: false, jacked: false, ripped: false, bodybuilder: false, gym_4: false, gym_5: false, kidnapper_1: false, kidnapper_2: false, kidnapper_3: false, tough_skin: false, combat_1: false, combat_2: false, combat_3: false, combat_4: false, combat_5: false, combat_6: false, combat_7: false, scavenger: false, blue_collar: false, iron_liver: false, swimmer: false, heartthrob: false, exhibitionnist: false, rough: false, contractor_1: false, contractor_2: false, contractor_3: false, cleaner_1: false, cleaner_2: false, cleaner_3: false, dealer_1: false, dealer_2: false, dealer_3: false }>> /* Compteurs invisibles pour débloquer les traits */ <<set $counters to { travels: 0, basketball_training: 0, drugs_bought: 0, drugs_sold: 0, successful_dhustles: 0, gym_workouts: 0, total_kidnappings: 0, combats_lost: 0, combats_won: 0, total_searches: 0, hotel_shifts: 0, total_alcohol_drank: 0, swims: 0, escort_clients: 0, outside: 0, rough: 0, shadowboard_quests: 0, apex_contracts: 0 }>> <<set $last_counters to clone($counters)>> <<set $morning_notifications to []>> <<set $milestones to { sprinter_25: false, sprinter_50: false, sprinter_75: false, athletic_25: false, athletic_50: false, athletic_75: false, bulk_25: false, bulk_50: false, bulk_75: false, dealer_10: false, dealer_40: false, dealer_100: false, hustle_25: false, hustle_50: false, hustle_75: false, gym_5: false, gym_10: false, gym_15: false, gym_20: false, gym_25: false, gym_30: false, gym_35: false, gym_40: false, gym_45: false, gym_50: false, gym_55: false, gym_65: false, gym_70: false, gym_75: false, gym_80: false, gym_90: false, gym_95: false, gym_100: false, gym_110: false, kidnap_5: false, kidnap_25: false, kidnap_75: false, combat_2: false, combat_10: false, combat_22: false, combat_45: false, combat_80: false, combat_125: false, combat_200: false }>> /* Variable pour les messages de l'inventaire */ <<set $inv_message to "">> /* Propriétés immobilières */ <<set $garage_level to 0>> <<set $basement_level to 0>> <<set $property_result to "">> /* Variables de capture */ <<set $kidnap_result to "">> /* Système de Cave & Captives */ <<set $basement_captives to []>> <<set $cell_log to "">> <<set $female_names to ["Alice", "Sarah", "Mia", "Chloe", "Emma", "Lily", "Sophia", "Zoe", "Maya", "Lucy", "Nina", "Eva", "Lara", "Ruby", "Anna", "Lisa", "Julie", "Kim", "Stella", "Jane", "Clara", "Rose", "Lea", "Mila", "Ines", "Lena", "Jade", "Manon", "Ambre", "Julia", "Alba", "Romy", "Iris", "Louna", "Juliette", "Camille", "Margaux", "Adele", "Jeanne", "Romane", "Louise", "Charlotte", "Victoria", "Alicia", "Olivia", "Paula", "Diana", "Laura", "Carla", "Maria", "Tessa", "Grace", "Ivy", "Willow", "Hazel", "Aurora", "Luna", "Aria", "Bella", "Cora", "Daphne", "Elise", "Fiona", "Gemma", "Hannah", "Isla", "Jasmine", "Kira", "Lyra", "Maeve", "Nora", "Ophelia", "Penelope", "Sienna", "Tara", "Uma", "Vera", "Willa", "Xena", "Yara", "Zara"]>> /* Limites des images de la Cave */ <<set setup.cell_limits to { "toy": 48, "bj": 26, "finishers": 12, "idle": 7, "idle_b": 12, "sex": 12, "sex_b": 48, "mmf": 9 }>> <<set $cell_action to "">> <<set setup.sex_limits to { "white": { "TEASE": 47, "GROPING": 27, "SHOWER": 49, "solo": 46, "BJ": 94, "HJ": 61, "FOOT": 2, "CUNI": 11, "TITJOB": 26, "FINGER": 14, "ANFINGER": 10, "VG": 87, "AN": 53, "RVG":41, "RAN": 39, "FF": 77, "ANI": 5, "CREAMPIE": 58, "FACIAL": 75, "CUMBODY": 47, "ANCREAMPIE": 16 }, "asian": { "TEASE": 14, "GROPING": 5, "SHOWER": 7, "solo": 0, "BJ": 32, "HJ": 18, "FOOT": 1, "CUNI": 11, "TITJOB": 2, "FINGER": 8, "ANFINGER": 1, "VG": 54, "AN": 16, "ANI": 1, "CREAMPIE": 18, "FACIAL": 24, "CUMBODY": 14, "ANCREAMPIE": 11, "RVG":11, "RAN": 6, "FF": 11, }, "black": { "TEASE": 6, "GROPING": 11, "SHOWER": 0, "solo": 0, "BJ": 26, "HJ": 6, "FOOT": 1, "CUNI": 10, "TITJOB": 1, "FINGER": 5, "ANFINGER": 1, "VG": 45, "AN": 13, "ANI": 0, "CREAMPIE": 17, "FACIAL": 21, "CUMBODY": 11, "ANCREAMPIE": 4, "FF":6,"RAN":2,"RVG":5 }, "beach":{ "TEASE": 18, "GROPING": 0, "SHOWER": 0, "solo": 0, "BJ": 8, "HJ": 2, "FOOT": 0, "CUNI": 1, "TITJOB": 0, "FINGER": 1, "ANFINGER": 0, "VG": 25, "AN": 17, "ANI": 0, "CREAMPIE": 0, "FACIAL": 2, "CUMBODY": 1, "ANCREAMPIE": 0 } }>> <<set setup.stream_limits to { "Solo": 10, "BJ": 14, "VG": 27, "AN": 13 }>> <<initVipDancerData>>
<h3>System Update</h3> <div style="background-color: #222; padding: 15px; border-left: 3px solid #00aaff;"> If you are loading a save from an older version of the game, please click the button below to update your save file and prevent errors. <br><br> <<link "🛠️ Patch Save to Latest Version">> <<replace "#patch-result">> /* Le tableau principal du gang */ /* 0 = Armes de mêlée/Pistolets basiques, 1 = SMG, 2 = Fusils d'assaut, 3 = Matériel Militaire */ <<if $gang_armory is undefined>> <<set $gang_armory to 0>> <</if>> <<if $gang_members is undefined>> <<set $gang_members to []>> <</if>> <<for _gmIdx to 0; _gmIdx < $gang_members.length; _gmIdx++>> <<if $gang_members[_gmIdx].custom_weapon is undefined>> <<set $gang_members[_gmIdx].custom_weapon to "inherited">> <</if>> <<if $gang_members[_gmIdx].custom_armor is undefined>> <<set $gang_members[_gmIdx].custom_armor to "inherited">> <</if>> <<if $gang_members[_gmIdx].assignment is "war">> <<set $gang_members[_gmIdx].assignment to "bodyguard">> <</if>> <</for>> /* 0 = Appartement miteux, 1 = Maison Outskirts, 2 = Penthouse */ <<if $player_housing is undefined>> <<set $player_housing to 0>> <</if>> <<if $player_housing_rented is undefined>> <<set $player_housing_rented to false>> <</if>> <<if $counters.outside is undefined>> <<set $counters.outside to 0>> <<set $traits.exhibitionnist to false>> <</if>> <<if $counters.rough is undefined>> <<set $counters.rough to 0>> <<set $traits.rough to false>> <</if>> <<if $counters.shadowboard_quests is undefined>> <<set $counters.shadowboard_quests to 0>> <<set $traits.contractor_1 to false>> <<set $traits.contractor_2 to false>> <<set $traits.contractor_3 to false>> <</if>> <<if $counters.apex_contracts is undefined>> <<set $counters.apex_contracts to 0>> <<set $traits.cleaner_1 to false>> <<set $traits.cleaner_2 to false>> <<set $traits.cleaner_3 to false>> <</if>> <<if $last_apex_contract_day is undefined>> <<set $last_apex_contract_day to -7>> <<set $apex_contracts to []>> <<set $apex_contract_completed to false>> <</if>> <<if $counters.drugs_sold is undefined>> <<set $counters.drugs_sold to 0>> <<set $traits.dealer_1 to false>> <<set $traits.dealer_2 to false>> <<set $traits.dealer_3 to false>> <</if>> <<if $milestones.dealer_10 is undefined>> <<set $milestones.dealer_10 to false>> <<set $milestones.dealer_40 to false>> <<set $milestones.dealer_100 to false>> <</if>> <<if $counters.total_alcohol_drank is undefined or isNaN($counters.total_alcohol_drank)>> <<set $counters.total_alcohol_drank to ($counters.total_alchohol_drank || 0)>> <</if>> <<if $milestones.hustle_25 is undefined>> <<set $milestones.hustle_25 to ($milestones.dhustle_25 || false)>> <<set $milestones.hustle_50 to ($milestones.dhustle_50 || false)>> <<set $milestones.hustle_75 to ($milestones.dhustle_75 || false)>> <</if>> <<if $max_hp isnot undefined>> <<set $maxhp += ($max_hp - 100 > 0 ? $max_hp - 100 : 0)>> <<unset $max_hp>> <</if>> <<if $cartel_contract is null>> <<set $cartel_contract to { type: "none", amount: 0, reward: 0, completed: true }>> <</if>> <<if $rep_xp >= $rep_next_level and (($rep_level is 5 and $player_housing < 1) or ($rep_level is 10 and $player_housing < 2))>> <<set $rep_xp to $rep_next_level>> <</if>> /* Des listes de noms pour générer les recrues */ <<if $name_pool_thugs is undefined>> <<set $name_pool_thugs to ["Spike", "Brick", "Razor", "Grip", "Scar", "Buster", "Roach", "Tank", "Bruiser", "Fang", "Snake", "Bone", "Crusher", "Bullet", "Dagger", "Iron", "Slug", "Hammer", "Rat", "Dirt", "Rust", "Trash", "Grunt", "Crow", "Scab", "Shank", "Shiv", "Nail", "Knuckles", "Bash", "Thump", "Vulture", "Grime", "Rubble", "Goon", "Stitch", "Gore", "Chopper", "Bite", "Smash", "Riot", "Mug", "Flea", "Toad", "Worm", "Gutter", "Slag", "Crowbar", "Puck", "Stomp", "Snout", "Grudge", "Ruckus", "Scrap", "Choke", "Maul", "Pound", "Wreck", "Dirk", "Brawler"]>> <<set $name_pool_mercs to ["Viktor", "Cross", "Ghost", "Silas", "Kane", "Dante", "Viper", "Rex", "Kestrel", "Hawk", "Talon", "Wolf", "Striker", "Nova", "Zero", "Axel", "Blade", "Cipher", "Dallas", "Echo", "Falcon", "Hunter", "Igor", "Jax", "Kodiak", "Logan", "Maddox", "Nyx", "Orion", "Pyro", "Quinn", "Raven", "Slade", "Titan", "Vance", "Wraith", "Xander", "Yuri", "Zane", "Atlas", "Boris", "Carver", "Maverick", "Ronin", "Gunner", "Ryder", "Flint", "Steele", "Ilya", "Hades", "Bane", "Apex", "Onyx", "Spartan", "Nomad", "Havoc", "Rogue", "Sabre", "Vanguard", "Ranger", "Jester", "Outlaw", "Tempest", "Griffin", "Paladin", "Scythe"]>> <</if>> /* --- 1. PROPRIÉTÉS DE L'EMPIRE --- */ <<if $empire_properties is undefined>> <<set $empire_properties to { hangar: { owned: false, capacity: 10, level: 1 }, brothel: { owned: false, capacity: 5, level: 1, lobbying_done: false }, escort: { owned: false, capacity: 3, level: 1 }, traphouse: { owned: false, rented: false, level: 1 }, growhouse: { owned: false, rented: false, level: 1 }, chemlab: { owned: false, rented: false, level: 1 } }>> <<else>> <<if $empire_properties.traphouse is undefined>><<set $empire_properties.traphouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.growhouse is undefined>><<set $empire_properties.growhouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.chemlab is undefined>><<set $empire_properties.chemlab to { owned: false, rented: false, level: 1 }>><</if>> <</if>> <<if $grow_house is undefined>> <<set $grow_house to { crop_active: false, strain: "none", planted_day: -1, grow_days_needed: 2, harvest_qty: 0, ready: false }>> <</if>> <<if $inventory !== undefined>> <<if $inventory.baking_soda is undefined>><<set $inventory.baking_soda to 0>><</if>> <<if $inventory.cutting_agent is undefined>><<set $inventory.cutting_agent to 0>><</if>> <<if $inventory.pill_binders is undefined>><<set $inventory.pill_binders to 0>><</if>> <<if $inventory.rolling_papers is undefined>><<set $inventory.rolling_papers to 0>><</if>> <<if $inventory.weed_seeds_skunk is undefined>><<set $inventory.weed_seeds_skunk to 0>><</if>> <<if $inventory.weed_seeds_haze is undefined>><<set $inventory.weed_seeds_haze to 0>><</if>> <<if $inventory.weed_seeds_kush is undefined>><<set $inventory.weed_seeds_kush to 0>><</if>> <</if>> <<if $traphouse_stash is undefined>> <<set $traphouse_stash to { money: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> <</if>> <<if $current_empire_tab is undefined>> <<set $current_empire_tab to "staff">> <</if>> <<set setup.cell_limits to { "toy": 48, "bj": 26, "finishers": 12, "idle": 7, "idle_b": 12, "sex": 12, "sex_b": 48, "mmf": 9 }>> <<set setup.stream_limits to { "Solo": 10, "BJ": 14, "VG": 27, "AN": 13 }>> <<set setup.sex_limits to { "white": { "TEASE": 47, "GROPING": 27, "SHOWER": 49, "solo": 46, "BJ": 94, "HJ": 61, "FOOT": 2, "CUNI": 11, "TITJOB": 26, "FINGER": 14, "ANFINGER": 10, "VG": 87, "AN": 53, "RVG": 41, "RAN": 39, "FF": 77, "ANI": 5, "CREAMPIE": 58, "FACIAL": 75, "CUMBODY": 47, "ANCREAMPIE": 16 }, "asian": { "TEASE": 14, "GROPING": 5, "SHOWER": 7, "solo": 0, "BJ": 32, "HJ": 18, "FOOT": 1, "CUNI": 11, "TITJOB": 2, "FINGER": 8, "ANFINGER": 1, "VG": 54, "AN": 16, "ANI": 1, "CREAMPIE": 18, "FACIAL": 24, "CUMBODY": 14, "ANCREAMPIE": 11, "RVG": 11, "RAN": 6, "FF": 11 }, "black": { "TEASE": 6, "GROPING": 11, "SHOWER": 0, "solo": 0, "BJ": 26, "HJ": 6, "FOOT": 1, "CUNI": 10, "TITJOB": 1, "FINGER": 5, "ANFINGER": 1, "VG": 45, "AN": 13, "ANI": 0, "CREAMPIE": 17, "FACIAL": 21, "CUMBODY": 11, "ANCREAMPIE": 4, "FF": 6, "RAN": 2, "RVG": 5 }, "beach": { "TEASE": 18, "GROPING": 0, "SHOWER": 0, "solo": 0, "BJ": 8, "HJ": 2, "FOOT": 0, "CUNI": 1, "TITJOB": 0, "FINGER": 1, "ANFINGER": 0, "VG": 25, "AN": 17, "ANI": 0, "CREAMPIE": 0, "FACIAL": 2, "CUMBODY": 1, "ANCREAMPIE": 0 } }>> /* --- 3. METTRE À JOUR LES FILLES DANS LE RÉSEAU --- */ <<if $network_girls isnot undefined>> <<for _i to 0; _i < $network_girls.length; _i++>> <<if $network_girls[_i].base_income is undefined>> <<set $network_girls[_i].base_income to random(40, 80)>> <</if>> <<if $network_girls[_i].clothes_level is undefined>> <<set $network_girls[_i].clothes_level to 0>> <</if>> <<if $network_girls[_i].surgery_done is undefined>> <<set $network_girls[_i].surgery_done to false>> <</if>> <<if $network_girls[_i].has_streaming_gear is undefined>> <<set $network_girls[_i].has_streaming_gear to false>> <</if>> <</for>> <</if>> /* --- 4. METTRE À JOUR LES FILLES DANS LA CAVE --- */ <<if $basement_captives isnot undefined>> <<for _j to 0; _j < $basement_captives.length; _j++>> <<if $basement_captives[_j].base_income is undefined>> <<set $basement_captives[_j].base_income to random(40, 80)>> <</if>> <<if $basement_captives[_j].clothes_level is undefined>> <<set $basement_captives[_j].clothes_level to 0>> <</if>> <<if $basement_captives[_j].surgery_done is undefined>> <<set $basement_captives[_j].surgery_done to false>> <</if>> <<if $basement_captives[_j].has_streaming_gear is undefined>> <<set $basement_captives[_j].has_streaming_gear to false>> <</if>> <</for>> <</if>> <<if $auction_unlocked is undefined>><<set $auction_unlocked to false>><</if>> <<if $email_auction_read is undefined>><<set $email_auction_read to false>><</if>> <<if $auction_sales_today is undefined>><<set $auction_sales_today to 0>><</if>> <<if $auction_pool is undefined>><<set $auction_pool to []>><</if>> <<if $auction_last_refresh is undefined>><<set $auction_last_refresh to -7>><</if>> <<if $auction_tab is undefined>><<set $auction_tab to "buy">><</if>> /* --- 5. NOUVEAUX SYSTÈMES (FUSILLADES, PRISON, GUERRE, ÉCONOMIE) --- */ <<if $inventory.ammo is undefined>><<set $inventory.ammo to 24>><</if>> <<if $inventory.shank is undefined>><<set $inventory.shank to 0>><</if>> <<if $gun_mag is undefined>><<set $gun_mag to 0>><</if>> <<if $gun_max_mag is undefined>><<set $gun_max_mag to 0>><</if>> <<if $player_cover is undefined>><<set $player_cover to 0>><</if>> <<if $enemy_suppressed is undefined>><<set $enemy_suppressed to false>><</if>> <<if $drug_buffs is undefined>> <<set $drug_buffs to { cocaine_int: 0, ecstasy_cha: 0, crack_str: 0, crack_cha: 0 }>> <</if>> <<if $laundered_money is undefined>><<set $laundered_money to 0>><</if>> <<if $laundering_level is undefined>><<set $laundering_level to 0>><</if>> <<if $laundering_fronts is undefined>> <<set $laundering_fronts to { arcade: { owned: ($laundering_level >= 1), level: 1, capacity: 6 }, gallery: { owned: ($laundering_level >= 2), level: 1, capacity: 4 }, bank: { owned: ($laundering_level >= 3), level: 1, capacity: 2 } }>> <</if>> <<if $chop_shop_owned is undefined>><<set $chop_shop_owned to false>><</if>> <<if $chop_shop_level is undefined>><<set $chop_shop_level to 1>><</if>> <<if $driver_boost_timer is undefined>><<set $driver_boost_timer to random(3, 7)>><</if>> <<if $contraband_warehouse_owned is undefined>><<set $contraband_warehouse_owned to false>><</if>> <<if $contraband_warehouse_level is undefined>><<set $contraband_warehouse_level to 1>><</if>> <<if $contraband_warehouse_capacity is undefined>><<set $contraband_warehouse_capacity to 6>><</if>> <<if $contraband_broker_unlocked is undefined>><<set $contraband_broker_unlocked to false>><</if>> <<if $last_meridian_contract_day is undefined>><<set $last_meridian_contract_day to -7>><</if>> <<if $meridian_hot_item is undefined>><<set $meridian_hot_item to "Weapons">><</if>> <<if $meridian_payout_mode is undefined>><<set $meridian_payout_mode to "cash">><</if>> <<if $meridian_log is undefined>><<set $meridian_log to "">><</if>> <<if $meridian_contract_spec is undefined>> <<set $meridian_contract_spec to { item: "Weapons", amount: 2, reward: 9600, completed: false }>> <</if>> <<if $meridian_contract_bulk is undefined>> <<set $meridian_contract_bulk to { amount: 5, reward: 19500, completed: false }>> <</if>> <<if $last_container_buy_day is undefined>><<set $last_container_buy_day to -1>><</if>> <<if $smuggler_crate_timer is undefined>><<set $smuggler_crate_timer to random(3, 7)>><</if>> <<if $harbor_smuggling_unlocked is undefined>><<set $harbor_smuggling_unlocked to false>><</if>> <<if $in_prison is undefined>><<set $in_prison to false>><</if>> <<if $prison_days_left is undefined>><<set $prison_days_left to 0>><</if>> <<if $prison_sentence_total is undefined>><<set $prison_sentence_total to 0>><</if>> <<if $prison_routine_step is undefined>><<set $prison_routine_step to "cell">><</if>> <<if $prison_protection is undefined>><<set $prison_protection to "none">><</if>> <<if $prison_gang_rep is undefined>><<set $prison_gang_rep to { aryan: 0, cartel: 0 }>><</if>> <<if $evidence_room is undefined>> <<set $evidence_room to { active: false, money: 0, weapons: [], active_melee: "none", active_firearm: "none", ammo: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> <</if>> <<if $war_state is undefined>> <<set $war_state to { active: false, target_district: "none", ambush_chance: 35, last_raid_day: -1, last_sabotage_day: -1, raid_wave: 0, assault_stage: 0 }>> <</if>> <<if $war_state.last_raid_day is undefined>><<set $war_state.last_raid_day to -1>><</if>> <<if $war_state.last_sabotage_day is undefined>><<set $war_state.last_sabotage_day to -1>><</if>> <<if $war_state.raid_wave is undefined>><<set $war_state.raid_wave to 0>><</if>> <<if $war_state.assault_stage is undefined>><<set $war_state.assault_stage to 0>><</if>> <<if $war_op_log is undefined>><<set $war_op_log to "">><</if>> <<if $factions is undefined>> <<set $factions to { "Projects": { name: "18th Street Hustlers", control: 25, defense: 80, max_defense: 80, tribute: 250, conquered: false, boss: "Lil' Tim", supply_sabotaged: false, informant_turned: false }, "Slums": { name: "Iron Vein Syndicate", control: 10, defense: 120, max_defense: 120, tribute: 400, conquered: false, boss: "Rasputin", supply_sabotaged: false, informant_turned: false }, "Outskirts": { name: "The Highwaymen", control: 0, defense: 160, max_defense: 160, tribute: 550, conquered: false, boss: "Roadkill", supply_sabotaged: false, informant_turned: false }, "Port": { name: "Los Zetas Cartel", control: 0, defense: 210, max_defense: 210, tribute: 800, conquered: false, boss: "El Sicario", supply_sabotaged: false, informant_turned: false }, "Neon": { name: "Red Dragon Triads", control: 0, defense: 260, max_defense: 260, tribute: 1200, conquered: false, boss: "Madame Psylocke", supply_sabotaged: false, informant_turned: false }, "Financial": { name: "Corrupt Police Union", control: 0, defense: 320, max_defense: 320, tribute: 1800, conquered: false, boss: "Commander Rico", supply_sabotaged: false, informant_turned: false } }>> <</if>> <<set _newMaxDefs to { "Projects": 80, "Slums": 120, "Outskirts": 160, "Port": 210, "Neon": 260, "Financial": 320 }>> <<for _fKey, _fMax range _newMaxDefs>> <<if $factions[_fKey] isnot undefined>> <<if $factions[_fKey].max_defense < _fMax>> <<if $factions[_fKey].conquered isnot true>> <<set $factions[_fKey].defense += (_fMax - $factions[_fKey].max_defense)>> <</if>> <<set $factions[_fKey].max_defense to _fMax>> <</if>> <<if $factions[_fKey].supply_sabotaged is undefined>><<set $factions[_fKey].supply_sabotaged to false>><</if>> <<if $factions[_fKey].informant_turned is undefined>><<set $factions[_fKey].informant_turned to false>><</if>> <</if>> <</for>> <<set $weapon_db["zip_gun"].mag_size to 2>> <<set $weapon_db["revolver"].mag_size to 6>> <<set $weapon_db["pistol_9mm"].mag_size to 12>> <<set $weapon_db["shotgun"].mag_size to 6>> <<set $weapon_db["shotgun"].damage to 85>> <<set $weapon_db["smg"].mag_size to 20>> <<set $weapon_db["assault_rifle"].mag_size to 30>> <<if $inventory.outfits is undefined>><<set $inventory.outfits to []>><</if>> <<if $active_outfit is undefined>><<set $active_outfit to "none">><</if>> <<set _savedActiveOutfit to $active_outfit>> <<if _savedActiveOutfit isnot "none" and $outfit_db isnot undefined>> <<unequipOutfit>> <</if>> <<set $outfit_db to { "street_hoodie": { name: "Street Hoodie & Cargo Pants", tier: "0-5", min_level: 1, price: 350, str: 0, int: 0, cha: 0, hp: 0, sta: 5, bonus_text: "+5 Max Stamina", desc: "Heavy dark cotton hoodie with reinforced cargo pants. Blends into the Projects while giving you room to move." }, "tracksuit": { name: "Neon Hustler Tracksuit", tier: "0-5", min_level: 2, price: 650, str: 0, int: 0, cha: 1, hp: 0, sta: 0, bonus_text: "+1 Charisma", desc: "Flashy designer tracksuit with a gold chain. Street dealers and working girls respect the look immediately." }, "biker_jacket": { name: "Reinforced Leather Biker Jacket", tier: "0-5", min_level: 4, price: 1200, str: 1, int: 0, cha: 0, hp: 5, sta: 0, bonus_text: "+1 Strength, +5 Max HP", desc: "Thick, scuffed cowhide leather jacket that absorbs knife slashes and brass-knuckle blows during street brawls." }, "tactical_vest": { name: "Concealed Kevlar & Tactical Rig", tier: "5-8", min_level: 5, price: 5000, str: 0, int: 0, cha: 0, hp: 15, sta: 5, bonus_text: "+15 Max HP, +5 Max Stamina", desc: "Lightweight ballistic vest worn beneath a dark combat shirt. Essential protection when turf wars and gunfights erupt." }, "club_blazer": { name: "Neon Strip Designer Blazer", tier: "5-8", min_level: 6, price: 7000, str: 0, int: 1, cha: 1, hp: 0, sta: 0, bonus_text: "+1 Charisma, +1 Intelligence", desc: "Silk shirt with an open velvet blazer and luxury watch. Turns heads in VIP clubs, hotels, and high-end brothels." }, "fixer_trench": { name: "Syndicate Fixer Trenchcoat", tier: "5-8", min_level: 7, price: 9500, str: 0, int: 1, cha: 1, hp: 10, sta: 0, bonus_text: "+1 Intelligence, +1 Charisma, +10 Max HP", desc: "Tailored wool trenchcoat with hidden holsters and lined pockets. Projects cold, calculated authority in dark web and cartel meetings." }, "italian_suit": { name: "Bespoke Italian Three-Piece Suit", tier: "8-15", min_level: 8, price: 18000, str: 0, int: 1, cha: 2, hp: 0, sta: 10, bonus_text: "+2 Charisma, +1 Intelligence, +10 Max Stamina", desc: "Hand-stitched Milanese wool suit. You look like a billionaire hedge-fund shark rather than a street criminal." }, "enforcer_armor": { name: "Heavy Mercenary Exo-Coat", tier: "8-15", min_level: 10, price: 28000, str: 2, int: 0, cha: 0, hp: 25, sta: 10, bonus_text: "+2 Strength, +25 Max HP, +10 Max Stamina", desc: "Military-grade trauma plates sewn into a reinforced leather duster. Built for surviving cartel ambushes and full-scale district assaults." }, "kingpin_suit": { name: "Armored Kingpin Pinstripe Suit", tier: "8-15", min_level: 12, price: 45000, str: 1, int: 2, cha: 2, hp: 20, sta: 10, bonus_text: "+2 Charisma, +2 Intelligence, +1 Strength, +20 Max HP, +10 Max Stamina", desc: "The pinnacle of underworld power: a custom-tailored pinstripe suit woven with ultra-light carbon-kevlar fibers, paired with a platinum timepiece." } }>> <<if _savedActiveOutfit isnot "none">> <<equipOutfit _savedActiveOutfit>> <</if>> <<if $last_container_export_day is undefined>><<set $last_container_export_day to -7>><</if>> <<if $daily_earned is undefined>><<set $daily_earned to 0>><</if>> <<if $daily_spent is undefined>><<set $daily_spent to 0>><</if>> <<if $nightly_earned is undefined>><<set $nightly_earned to 0>><</if>> <<if $nightly_spent is undefined>><<set $nightly_spent to 0>><</if>> <<if $last_tracked_money is undefined>><<set $last_tracked_money to $money>><</if>> <<if $traits.gym_4 is undefined>><<set $traits.gym_4 to false>><</if>> <<if $traits.gym_5 is undefined>><<set $traits.gym_5 to false>><</if>> <<if $last_coach_day is undefined or $last_coach_day is 0>><<set $last_coach_day to -1>><</if>> <<if $last_yoga_day is undefined or $last_yoga_day is 0>><<set $last_yoga_day to -1>><</if>> <<if $milestones.gym_65 is undefined>> <<set $milestones.gym_65 to false>> <<set $milestones.gym_70 to false>> <<set $milestones.gym_75 to false>> <<set $milestones.gym_80 to false>> <<set $milestones.gym_90 to false>> <<set $milestones.gym_95 to false>> <<set $milestones.gym_100 to false>> <<set $milestones.gym_110 to false>> <</if>> <<set $last_counters to clone($counters)>> /* --- MESSAGE DE SUCCÈS --- */ <br> <span style="color: #00ffaa;"><strong>Save successfully patched!</strong> All new features and character stats have been added to your current game.</span> <</replace>> <</link>> <div id="patch-result"></div> </div> [[Back|Home]]
/* Enregistrement du temps AVANT le trajet */ <<set _oldTime to $time>> /* Si le joueur reste dans le même quartier, le trajet prend 0 minute */ <<if $current_location is $destination>> <<set _travelTime to 0>> <<else>> <<set _travelTime to 30>> /* Bonus du trait Sprinter (-10 mins) */ <<if $traits.sprinter is true>> <<set _travelTime -= 10>> <</if>> /* Bonus de vitesse du véhicule actif */ <<if $active_vehicle is "Rusty Wreck" or $active_vehicle is "Rusty Shitbox">> <<set _travelTime -= 5>> <<elseif $active_vehicle is "Standard Sedan" or $active_vehicle is "Utility Van">> <<set _travelTime -= 10>> <<elseif $active_vehicle is "Armored SUV">> <<set _travelTime -= 15>> <<elseif $active_vehicle is "Sports Car" or $active_vehicle is "Viper" or $active_vehicle is "Hypercar">> <<set _travelTime -= 20>> <</if>> /* Temps minimum de trajet : 5 minutes */ <<set _travelTime to Math.max(5, _travelTime)>> <<set $counters.travels += 1>> <</if>> /* Ajout du temps et mise à jour de la position */ <<set $time += _travelTime>> <<set $current_location to $destination>> <<updateMarket>> /* Vérification mathématique : le trajet a-t-il franchi 4h00 du matin (240 minutes) ? */ <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<elseif $destination isnot "Home" and $war_state isnot undefined and $war_state.active is true and random(1, 100) <= $war_state.ambush_chance>> /* EMBUSCADE PENDANT L'ÉTAT DE GUERRE */ <<goto "War_Ambush">> <<else>> <<goto $destination>> <</if>>
<<if $player_housing is 0>> You wake up on a lumpy mattress. The distant sound of police sirens echoes through the thin walls of your slum apartment. <<elseif $player_housing is 1>> You wake up in a comfortable king-size bed. Outside your secured window, the Outskirts are relatively quiet. <<elseif $player_housing is 2>> You wake up in silk sheets. The morning sun illuminates your penthouse, offering a breathtaking view over the Financial District. <</if>> <br><br> <<nobr>> <<if $current_crisis isnot undefined>> <<goto "Event_Crisis">> <</if>> /* Capture tout changement de $money intervenu pendant Event_Crisis */ <<if $daily_earned is undefined>><<set $daily_earned to 0>><</if>> <<if $daily_spent is undefined>><<set $daily_spent to 0>><</if>> <<if $nightly_earned is undefined>><<set $nightly_earned to 0>><</if>> <<if $nightly_spent is undefined>><<set $nightly_spent to 0>><</if>> <<if $last_tracked_money isnot undefined>> <<if $money > $last_tracked_money>> <<set $nightly_earned += ($money - $last_tracked_money)>> <<elseif $money < $last_tracked_money>> <<set $nightly_spent += ($last_tracked_money - $money)>> <</if>> <</if>> <<set _totalEarned to ($daily_earned + $nightly_earned)>> <<set _totalSpent to ($daily_spent + $nightly_spent)>> <<set _netBalance to (_totalEarned - _totalSpent)>> <<if $morning_notifications.length > 0>> While resting, you reflect on your recent experiences: <br><br> <<for _i to 0; _i < $morning_notifications.length; _i++>> <<print $morning_notifications[_i]>><br><br> <</for>> /* On vide les notifications pour la nuit prochaine */ <<set $morning_notifications to []>> <</if>> /* --- BILAN FINANCIER DE FIN DE JOURNÉE --- */ <div style="background: linear-gradient(165deg, #141820 0%, #0b0e13 100%); border: 1px solid #2e3846; border-left: 4px solid <<print (_netBalance >= 0 ? '#00ffaa' : '#ff4444')>>; border-radius: 8px; padding: 14px 18px; margin: 10px 0 20px 0; max-width: 580px;"> <div style="font-size: 0.9em; font-weight: 800; color: #dce5f0; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 10px; border-bottom: 1px solid #232b36; padding-bottom: 6px;"> 📊 End of Day Financial Summary </div> <div style="display: flex; justify-content: space-between; margin-bottom: 6px; font-size: 0.92em;"> <span style="color: #aaa;">Total Money Earned:</span> <span style="color: #00ffaa; font-weight: bold;">+$<<print _totalEarned>> <span style="font-size: 0.82em; color: #7f94a8; font-weight: normal;">(Day: +$<<print $daily_earned>> | Nightly Empire: +$<<print $nightly_earned>>)</span></span> </div> <div style="display: flex; justify-content: space-between; margin-bottom: 8px; font-size: 0.92em;"> <span style="color: #aaa;">Total Money Spent / Deducted:</span> <span style="color: #ff6666; font-weight: bold;">-$<<print _totalSpent>> <span style="font-size: 0.82em; color: #7f94a8; font-weight: normal;">(Day: -$<<print $daily_spent>> | Nightly Bills/Losses: -$<<print $nightly_spent>>)</span></span> </div> <div style="display: flex; justify-content: space-between; border-top: 1px dashed #2e3846; padding-top: 8px; font-size: 1.05em;"> <strong style="color: #fff;">Net Daily Total:</strong> <strong style="color: <<print (_netBalance >= 0 ? '#00ffaa' : '#ff4444')>>;"><<print (_netBalance >= 0 ? "+$" + _netBalance : "-$" + Math.abs(_netBalance))>></strong> </div> </div> /* Réinitialisation des compteurs journaliers pour la nouvelle journée */ <<set $daily_earned to 0>> <<set $daily_spent to 0>> <<set $nightly_earned to 0>> <<set $nightly_spent to 0>> <<set $last_tracked_money to $money>> <<link "Get out of bed">><<goto $wake_location>><</link>> <</nobr>>
<<widget "endOfDayChecks">> <<if $daily_earned is undefined>><<set $daily_earned to 0>><</if>> <<if $daily_spent is undefined>><<set $daily_spent to 0>><</if>> <<if $last_tracked_money isnot undefined>> <<if $money > $last_tracked_money>> <<set $daily_earned += ($money - $last_tracked_money)>> <<elseif $money < $last_tracked_money>> <<set $daily_spent += ($last_tracked_money - $money)>> <</if>> <</if>> <<set $nightly_earned to 0>> <<set $nightly_spent to 0>> /* ======================================================= */ /* --- BLACK SWAN EVENTS & PASSIVE HEAT REDUCTION --- */ /* ======================================================= */ /* 0. Vérification des spécialistes du gang avant le tick */ <<set _hasWarden to false>> <<set _hasHacker to false>> <<set _hasStreetCaptain to false>> <<set _hasSmuggler to false>> <<set _hasDriver to false>> <<set _hasFixer to false>> <<set _hasTurfDefenders to 0>> <<set _gangUpkeep to 0>> <<set _traphouseGuards to 0>> <<set _growhouseGuards to 0>> <<set _chemlabGuards to 0>> <<if $traphouse_stash is undefined>> <<set $traphouse_stash to { money: 0, weed: 0, cocaine: 0, ecstasy: 0, crack: 0, heroin: 0 }>> <</if>> <<for _g to 0; _g < $gang_members.length; _g++>> <<set _member to $gang_members[_g]>> <<set _gangUpkeep += _member.upkeep>> <<if _member.assignment is "basement" and _member.specialty is "Warden">><<set _hasWarden to true>><</if>> <<if _member.assignment is "hangar" and _member.specialty is "Hacker">><<set _hasHacker to true>><</if>> <<if _member.assignment is "street" and _member.specialty is "Street Captain">><<set _hasStreetCaptain to true>><</if>> <<if _member.specialty is "Smuggler">><<set _hasSmuggler to true>><</if>> <<if _member.specialty is "Driver">><<set _hasDriver to true>><</if>> <<if _member.specialty is "Corrupt Ex-Cop">><<set _hasFixer to true>><</if>> <<if _member.assignment is "defend_turf">><<set _hasTurfDefenders += _member.strength>><</if>> /* Éclaireurs (Scouts) affaiblissent les défenses de la faction ciblée */ <<if _member.assignment is "scout" and $war_state.active is true and $war_state.target_district isnot "none">> <<set _tDist to $war_state.target_district>> <<set _scoutDrop to random(4, 8)>> <<set $factions[_tDist].defense to Math.max(0, $factions[_tDist].defense - _scoutDrop)>> <<run $morning_notifications.push("<span style='color: #00aaff;'><strong>Recon Report:</strong> Scout <strong>" + _member.name + "</strong> sabotaged enemy supply lines in " + _tDist + " (-" + _scoutDrop + " Enemy Defense).</span>")>> <</if>> /* --- 1. SLUMS TRAP HOUSE DISTRIBUTION (CONSUMES DRUGS) --- */ <<if _member.assignment is "traphouse">> <<set _traphouseGuards += 1>> <<set _dMult to ($traits.dealer_3 is true ? 1.50 : ($traits.dealer_2 is true ? 1.25 : ($traits.dealer_1 is true ? 1.15 : 1.0)))>> <<set _pickDrug to "">> <<set _unitPrice to 0>> <<if ($traphouse_stash.crack || 0) > 0 or ($inventory.crack || 0) > 0>> <<set _pickDrug to "crack">><<set _unitPrice to 90>> <<elseif ($traphouse_stash.cocaine || 0) > 0 or ($inventory.cocaine || 0) > 0>> <<set _pickDrug to "cocaine">><<set _unitPrice to 150>> <<elseif ($traphouse_stash.heroin || 0) > 0 or ($inventory.heroin || 0) > 0>> <<set _pickDrug to "heroin">><<set _unitPrice to 175>> <<elseif ($traphouse_stash.ecstasy || 0) > 0 or ($inventory.ecstasy || 0) > 0>> <<set _pickDrug to "ecstasy">><<set _unitPrice to 65>> <<elseif ($traphouse_stash.weed || 0) > 0 or ($inventory.weed || 0) > 0>> <<set _pickDrug to "weed">><<set _unitPrice to 30>> <</if>> <<if _pickDrug isnot "">> <<set _desiredQty to random(2, 4)>> <<set _stashAvail to ($traphouse_stash[_pickDrug] || 0)>> <<set _invAvail to ($inventory[_pickDrug] || 0)>> <<set _totalAvail to _stashAvail + _invAvail>> <<set _unitsConsumed to Math.min(_desiredQty, _totalAvail)>> <<set _fromStash to Math.min(_stashAvail, _unitsConsumed)>> <<set $traphouse_stash[_pickDrug] -= _fromStash>> <<set _fromInv to _unitsConsumed - _fromStash>> <<if _fromInv > 0>> <<set $inventory[_pickDrug] -= _fromInv>> <</if>> <<set _trapInc to Math.floor(_unitsConsumed * _unitPrice * _dMult)>> <<set $money += _trapInc>> <<set $nightly_earned += _trapInc>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + _unitsConsumed>> <<run $morning_notifications.push("<span style='color: #00ffaa;'><strong>🏚️ Trap House:</strong> <strong>" + _member.name + "</strong> pushed <strong>" + _unitsConsumed + "x " + _pickDrug.toUpperFirst() + "</strong> on local corners overnight, netting <strong>$" + _trapInc + "</strong> in cash" + (_dMult > 1 ? " (Boosted by Dealing Perk)" : "") + ". (<strong>" + _unitsConsumed + "x " + _pickDrug + "</strong> consumed from stock).</span>")>> <<else>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>🏚️ Trap House:</strong> <strong>" + _member.name + "</strong> stood watch, but your trap stash and pockets had no drugs to push overnight. (Stock crack or street drugs to resume sales).</span>")>> <</if>> <</if>> /* --- 2. SUBURBAN GROW HOUSE DISTRIBUTION (CONSUMES WEED) --- */ <<if _member.assignment is "growhouse">> <<set _growhouseGuards += 1>> <<set _dMult to ($traits.dealer_3 is true ? 1.50 : ($traits.dealer_2 is true ? 1.25 : ($traits.dealer_1 is true ? 1.15 : 1.0)))>> <<set _wAvail to ($inventory.weed || 0)>> <<if _wAvail > 0>> <<set _wConsumed to Math.min(random(2, 5), _wAvail)>> <<set $inventory.weed -= _wConsumed>> <<set _wInc to Math.floor(_wConsumed * 35 * _dMult)>> <<set $money += _wInc>> <<set $nightly_earned += _wInc>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + _wConsumed>> <<run $morning_notifications.push("<span style='color: #00ffaa;'><strong>🌿 Grow House:</strong> <strong>" + _member.name + "</strong> packaged and distributed <strong>" + _wConsumed + "x fresh Weed</strong> to suburban clients overnight, netting <strong>$" + _wInc + "</strong> in cash" + (_dMult > 1 ? " (Boosted by Dealing Perk)" : "") + ". (<strong>" + _wConsumed + "x Weed</strong> consumed from inventory).</span>")>> <<else>> <<run $morning_notifications.push("<span style='color: #aaa;'><strong>🌿 Grow House:</strong> <strong>" + _member.name + "</strong> regulated nutrient pumps and lighting for the hydroponic crop overnight. (No cured weed in inventory to distribute).</span>")>> <</if>> <</if>> /* --- 3. INDUSTRIAL CHEMICAL LAB DISTRIBUTION (CONSUMES SYNTHETICS) --- */ <<if _member.assignment is "chemlab">> <<set _chemlabGuards += 1>> <<set $heat to Math.max(0, $heat - 1)>> <<set _dMult to ($traits.dealer_3 is true ? 1.50 : ($traits.dealer_2 is true ? 1.25 : ($traits.dealer_1 is true ? 1.15 : 1.0)))>> <<set _cDrug to "">> <<set _cPrice to 0>> <<set _cMax to 0>> <<if ($inventory.ecstasy || 0) > 0>> <<set _cDrug to "ecstasy">><<set _cPrice to 75>><<set _cMax to random(2, 4)>> <<elseif ($inventory.cocaine || 0) > 0>> <<set _cDrug to "cocaine">><<set _cPrice to 160>><<set _cMax to random(1, 3)>> <<elseif ($inventory.heroin || 0) > 0>> <<set _cDrug to "heroin">><<set _cPrice to 180>><<set _cMax to random(1, 3)>> <</if>> <<if _cDrug isnot "">> <<set _cConsumed to Math.min(_cMax, $inventory[_cDrug])>> <<set $inventory[_cDrug] -= _cConsumed>> <<set _chemInc to Math.floor(_cConsumed * _cPrice * _dMult)>> <<set $money += _chemInc>> <<set $nightly_earned += _chemInc>> <<set $counters.drugs_sold = ($counters.drugs_sold || 0) + _cConsumed>> <<run $morning_notifications.push("<span style='color: #00ffaa;'><strong>🏭 Chem Lab:</strong> <strong>" + _member.name + "</strong> supplied <strong>" + _cConsumed + "x " + _cDrug.toUpperFirst() + "</strong> to nightlife syndicate contacts overnight, netting <strong>$" + _chemInc + "</strong> in cash and scrubbing -1 Heat" + (_dMult > 1 ? " (Boosted by Dealing Perk)" : "") + ". (<strong>" + _cConsumed + "x " + _cDrug + "</strong> consumed from inventory).</span>")>> <<else>> <<run $morning_notifications.push("<span style='color: #aaa;'><strong>🏭 Chem Lab:</strong> <strong>" + _member.name + "</strong> guarded the chemical reactors and dock perimeter overnight (-1 Heat). (No processed narcotics in inventory to distribute).</span>")>> <</if>> <</if>> <</for>> /* Si Corrupt Ex-Cop présent, débloque automatiquement le lobbying politique */ <<if _hasFixer is true and $empire_properties.brothel.lobbying_done is false>> <<set $empire_properties.brothel.lobbying_done to true>> <<run $morning_notifications.push("<span style='color: #ffd700;'><strong>The Fixer:</strong> Your Corrupt Ex-Cop pulled strings at City Hall. Political lobbying for The Velvet Rose Brothel is now approved!</span>")>> <</if>> /* Notifications d'inactivité des domaines si aucun soldat n'est assigné */ <<if _traphouseGuards is 0 and $empire_properties && $empire_properties.traphouse && ($empire_properties.traphouse.owned is true or $empire_properties.traphouse.rented is true)>> <<set _traphouseDrugsCount to (($traphouse_stash.crack || 0) + ($traphouse_stash.cocaine || 0) + ($traphouse_stash.weed || 0) + ($traphouse_stash.ecstasy || 0) + ($traphouse_stash.heroin || 0))>> <<if _traphouseDrugsCount > 0>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>🏚️ Trap House:</strong> You have <strong>" + _traphouseDrugsCount + " drug unit(s)</strong> sitting idle in your trap stash safe, but no gang soldier stationed to push them. Assign a runner via your Phone's Empire App!</span>")>> <</if>> <</if>> <<set $daily_station_seduced to false>> /* 1. Calcul des probabilités de crise (Uniquement si Heat >= 10% ! 0% de risque en dessous de 10 Heat) */ <<set _crisisChance to ($heat >= 10 ? Math.floor($heat / 4) : 0)>> /* 2. Jet de dé (seulement si pas en prison et si Heat >= 10) */ <<if $in_prison is false and _crisisChance > 0 and random(1, 100) <= _crisisChance and $current_crisis is undefined>> <<set _possible_crises to []>> <<if $empire_properties.hangar.owned is true>> <<run _possible_crises.push("crypto_crash")>> <</if>> <<if $empire_properties.hangar.owned is true or $empire_properties.brothel.owned is true>> <<run _possible_crises.push("rico_raid")>> <</if>> <<if $basement_captives.length > 0>> <<run _possible_crises.push("blackmailer")>> <<run _possible_crises.push("sickness")>> <</if>> <<set _street_count to 0>> <<for _i to 0; _i < $network_girls.length; _i++>> <<if $network_girls[_i].location is "street">><<set _street_count++>><</if>> <</for>> <<if _street_count > 0>> <<run _possible_crises.push("drive_by")>> <</if>> <<if _possible_crises.length > 0>> <<set $current_crisis to _possible_crises.random()>> <</if>> <</if>> /* 3. Baisse passive de la Heat après le jet de crise (Base -1 + Structures de Blanchiment + Corrupt Ex-Cop) */ <<set _heatDrop to 1>> <<if $laundering_level is 1>><<set _heatDrop += 3>> <<elseif $laundering_level is 2>><<set _heatDrop += 6>> <<elseif $laundering_level >= 3>><<set _heatDrop += 10>> <</if>> <<if _hasFixer is true>><<set _heatDrop += 4>><</if>> <<if $heat > 0>> <<set $heat to Math.max(0, $heat - _heatDrop)>> <</if>> /* GESTION DU TIMER CRYPTO (Si activé) */ <<if $crypto_crash_timer > 0>> <<set $crypto_crash_timer -= 1>> <</if>> /* --- RESET DU RECRUTEMENT GANG --- */ <<unset $daily_bar_recruit>> <<unset $daily_club_recruit>> <<unset $daily_vip_dancer>> /* ======================================================= */ /* --- GESTION DU RÉSEAU (NIGHTLY TICK) --- */ /* ======================================================= */ <<set $auction_sales_today to 0>> <<set _street_income to 0>> <<set _hangar_income to 0>> <<set _brothel_income to 0>> <<set _escort_income to 0>> <<set _front_income to 0>> <<set _front_heat_drop to 0>> /* On parcourt la liste à l'envers pour pouvoir supprimer des éléments sans bug */ <<for _i to $network_girls.length - 1; _i >= 0; _i-->> <<set _girl to $network_girls[_i]>> <<set $network_girls[_i].stream_minigame_played to false>> /* 1. GESTION DES FILLES EN DÉTRESSE (PERMADEATH) */ <<if _girl.status is "arrested">> <<set _girl.days_in_trouble += 1>> <<if _girl.days_in_trouble > 1>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>CRITICAL:</strong> " + _girl.name + " was left in jail too long. She made a deal with the cops. You lost her forever.</span>")>> <<run $network_girls.deleteAt(_i)>> <<else>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>REMINDER:</strong> " + _girl.name + " is still in jail! Go to the Police Station TODAY.</span>")>> <</if>> <<continue>> <</if>> <<if _girl.status is "kidnapped">> <<set _girl.days_in_trouble += 1>> <<if _girl.days_in_trouble > 7>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>CRITICAL:</strong> It's been a week since " + _girl.name + " was taken. Word is she's dead. You lost her forever.</span>")>> <<run $network_girls.deleteAt(_i)>> <<else>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>REMINDER:</strong> " + _girl.name + " is still held captive (" + (7 - _girl.days_in_trouble) + " days left). Check your Phone.</span>")>> <</if>> <<continue>> <</if>> /* 2. GESTION DU TRAVAIL SELON LE LIEU */ <<if _girl.status is "active">> /* --- A. LE TROTTOIR (Risques élevés, revenus normaux) --- */ <<if _girl.location is "street">> <<set _eventRoll to random(1, 100)>> <<addHeat 2>> /* EFFET STREET CAPTAIN OU CORRUPT EX-COP : Réduit fortement les risques */ <<if _hasStreetCaptain is true>> <<set _eventRoll to random(1, 300)>> <<elseif _hasFixer is true>> <<set _eventRoll to random(6, 150)>> <</if>> <<if _eventRoll <= 10>> <<set $network_girls[_i].status to "arrested">> <<set $network_girls[_i].days_in_trouble to 0>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>EMERGENCY:</strong> " + _girl.name + " got busted by vice cops last night. She's at the station.</span>")>> <<elseif _eventRoll <= 15>> <<set $network_girls[_i].status to "kidnapped">> <<set $network_girls[_i].days_in_trouble to 0>> <<set _kidnap_spots to ["Slums", "Port", "Outskirts"]>> <<set $network_girls[_i].kidnap_location to _kidnap_spots.random()>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>EMERGENCY:</strong> " + _girl.name + " was grabbed by a rival gang. Check your Phone to see where!</span>")>> <<else>> <<set _bonusCaptain to (_hasStreetCaptain is true ? 40 : 0)>> <<set _dailyEarn to _girl.base_income + _bonusCaptain + random(-20, 30)>> <<if _dailyEarn < 0>><<set _dailyEarn to 0>><</if>> <<if $traits.exhibitionnist is true>> <<set _dailyEarn to Math.floor(_dailyEarn * 1.10)>> <</if>> <<set _street_income += _dailyEarn>> <</if>> /* --- B. LE HANGAR (Aucun risque, revenus boostés) --- */ <<elseif _girl.location is "hangar">> <<set _streamEarn to Math.floor(_girl.base_income * 1.5) + random(20, 60)>> <<if _hasHacker is true>> <<set _streamEarn to Math.floor(_streamEarn * 1.30)>> <</if>> <<if $crypto_crash_timer > 0>><<set _streamEarn to Math.floor(_streamEarn / 2)>><</if>> <<set _hangar_income += _streamEarn>> /* --- C. LE BORDEL (The Velvet Rose - Haut rendement) --- */ <<elseif _girl.location is "brothel">> <<set _bEarn to Math.floor(_girl.base_income * 2.0) + (_girl.clothes_level * 25) + (_girl.surgery_done ? 50 : 0) + random(30, 80)>> <<set _brothel_income += _bEarn>> /* --- D. PLATEFORME ESCORT VIP (Rendement élite) --- */ <<elseif _girl.location is "escort">> <<set _eEarn to Math.floor(_girl.base_income * 2.8) + (_girl.clothes_level * 40) + (_girl.surgery_done ? 90 : 0) + random(50, 120)>> <<if _hasHacker is true>> <<set _eEarn to Math.floor(_eEarn * 1.25)>> <</if>> <<set _escort_income += _eEarn>> /* --- E. ENTREPRISES DE BLANCHIMENT (Revenus intermédiaires + Baisse de Heat par fille) --- */ <<elseif _girl.location is "arcade">> <<set _aEarn to Math.floor(_girl.base_income * 1.25) + random(15, 35)>> <<set _front_income += _aEarn>> <<set _front_heat_drop += 1>> <<elseif _girl.location is "gallery">> <<set _gEarn to Math.floor(_girl.base_income * 1.75) + (_girl.clothes_level * 15) + random(25, 50)>> <<set _front_income += _gEarn>> <<set _front_heat_drop += 2>> <<elseif _girl.location is "bank">> <<set _bkEarn to Math.floor(_girl.base_income * 2.35) + (_girl.clothes_level * 25) + (_girl.surgery_done ? 45 : 0) + random(40, 80)>> <<set _front_income += _bkEarn>> <<set _front_heat_drop += 3>> <</if>> <</if>> <</for>> /* 3. PAIEMENTS GLOBAUX DU RÉSEAU ET NOTIFICATIONS */ <<if _street_income > 0>> <<set $money += _street_income>> <<set $nightly_earned += _street_income>> <<run $morning_notifications.push("<span style='color: #00ffaa;'><strong>Street Income:</strong> Your girls on the streets brought in <strong>$" + _street_income + "</strong> overnight.</span>")>> <</if>> <<if _hangar_income > 0>> <<set $money += _hangar_income>> <<set $nightly_earned += _hangar_income>> <<if _hasHacker is true>> <<run $morning_notifications.push("<span style='color: #00aaff;'><strong>Streaming Income:</strong> The hangar generated <strong>$" + _hangar_income + "</strong> (Crypto channels optimized by your Hacker).</span>")>> <<else>> <<run $morning_notifications.push("<span style='color: #00aaff;'><strong>Streaming Income:</strong> The hangar generated <strong>$" + _hangar_income + "</strong> in subs and crypto tips.</span>")>> <</if>> <</if>> <<if _brothel_income > 0>> <<set $money += _brothel_income>> <<set $nightly_earned += _brothel_income>> <<run $morning_notifications.push("<span style='color: #ff55aa;'><strong>Velvet Rose Brothel:</strong> Your rooms generated <strong>$" + _brothel_income + "</strong> overnight.</span>")>> <</if>> <<if _escort_income > 0>> <<set $money += _escort_income>> <<set $nightly_earned += _escort_income>> <<run $morning_notifications.push("<span style='color: #ffd700;'><strong>VIP Escort Platform:</strong> High-roller bookings brought in <strong>$" + _escort_income + "</strong> overnight.</span>")>> <</if>> <<if _front_income > 0>> <<set $money += _front_income>> <<set $nightly_earned += _front_income>> <<set $heat to Math.max(0, $heat - _front_heat_drop)>> <<run $morning_notifications.push("<span style='color: #aa55ff;'><strong>Laundering Fronts:</strong> Your staff working at your legitimate fronts earned <strong>$" + _front_income + "</strong> and scrubbed <strong>-" + _front_heat_drop + "% Heat</strong> overnight.</span>")>> <</if>> <<if _hasStreetCaptain is true and _street_income > 0>> <<run $morning_notifications.push("<span style='color: #ffd700;'><strong>Security Alert:</strong> Your Street Captain secured the strolls last night.</span>")>> <</if>> /* --- 4. REVENUS PASSIFS DU CHOP SHOP & SMUGGLER --- */ <<if $chop_shop_owned is true>> <<set _chopPassive to ($chop_shop_level * 250) + (_hasDriver or _hasSmuggler ? 300 : 0)>> /* Démantèlement automatique d'une voiture volée en stock s'il y en a */ <<if $stolen_vehicles.length > 0>> <<set _scrappedCar to $stolen_vehicles[0]>> <<run $stolen_vehicles.deleteAt(0)>> <<set _chopPassive += (_scrappedCar is "Hypercar" ? 1500 : (_scrappedCar is "Sports Car" ? 1000 : 350))>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>Chop Shop Operation:</strong> Your mechanics stripped a stolen " + _scrappedCar + " and ran nightly parts orders, earning <strong>$" + _chopPassive + "</strong>.</span>")>> <<else>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>Chop Shop Operation:</strong> Nightly parts & VIN cloning brought in <strong>$" + _chopPassive + "</strong>.</span>")>> <</if>> <<set $money += _chopPassive>> <<set $nightly_earned += _chopPassive>> <</if>> /* --- THE SMUGGLER (SMUGGLER) : INTERCEPTE UNE CAISSE DE CONTREBANDE TOUS LES 3 À 7 JOURS --- */ <<if $smuggler_crate_timer is undefined>><<set $smuggler_crate_timer to random(3, 7)>><</if>> <<if $contraband_warehouse_owned is undefined>><<set $contraband_warehouse_owned to false>><</if>> <<if $contraband_warehouse_capacity is undefined>><<set $contraband_warehouse_capacity to 6>><</if>> <<if _hasSmuggler is true and $contraband_warehouse_owned is true>> <<set $smuggler_crate_timer -= 1>> <<if $smuggler_crate_timer <= 0>> <<set _curCrates to 0>> <<for _cIdx to 0; _cIdx < $contraband_types.length; _cIdx++>> <<set _curCrates += ($container_stash[$contraband_types[_cIdx]] || 0)>> <</for>> <<if _curCrates < $contraband_warehouse_capacity>> <<set _smuggledItem to $contraband_types.random()>> <<set $container_stash[_smuggledItem] += 1>> <<set $smuggler_crate_timer to random(3, 7)>> <<run $morning_notifications.push("<span style='color: #aa00ff;'><strong>The Smuggler:</strong> Your Smuggler diverted a harbor freighter manifest overnight and stashed 1x crate of <strong>" + _smuggledItem + "</strong> inside Warehouse 12!</span>")>> <<else>> <<set $smuggler_crate_timer to 1>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>The Smuggler:</strong> Your Smuggler had a line on a contraband crate last night, but Warehouse 12 is completely full!</span>")>> <</if>> <</if>> <</if>> /* --- THE BOOSTER (DRIVER) : VOLE UNE VOITURE TOUS LES 3 À 7 JOURS --- */ <<if $driver_boost_timer is undefined>><<set $driver_boost_timer to random(3, 7)>><</if>> <<if _hasDriver is true and $garage_level > 0>> <<set $driver_boost_timer -= 1>> <<if $driver_boost_timer <= 0>> <<set _maxGarageCap to $garage_level * 2>> <<if $stolen_vehicles.length < _maxGarageCap>> <<set _boostPool to ["Sedan", "SUV", "Sports Car", "Sports Car", "Hypercar"]>> <<set _boostedCar to _boostPool.random()>> <<run $stolen_vehicles.push(_boostedCar)>> <<set $driver_boost_timer to random(3, 7)>> <<run $morning_notifications.push("<span style='color: #00ffaa;'><strong>The Booster:</strong> Your Driver hotwired a <strong>" + _boostedCar + "</strong> overnight and parked it in your Underground Garage!</span>")>> <<else>> <<set $driver_boost_timer to 1>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>The Booster:</strong> Your Driver spotted a prime vehicle to boost last night, but your Underground Garage is full!</span>")>> <</if>> <</if>> <</if>> /* --- 5. TRIBUTS DES TERRITOIRES CONQUIS (TURF WARS) --- */ <<set _turfIncome to 0>> <<set _distKeys to ["Projects", "Slums", "Outskirts", "Port", "Neon", "Financial"]>> <<for _d to 0; _d < _distKeys.length; _d++>> <<set _dKey to _distKeys[_d]>> <<if $factions[_dKey].conquered is true>> <<set _turfIncome += $factions[_dKey].tribute>> <</if>> <</for>> <<if _turfIncome > 0>> <<set $money += _turfIncome>> <<set $nightly_earned += _turfIncome>> <<run $morning_notifications.push("<span style='color: #00ffaa;'><strong>Territory Tribute:</strong> Conquered districts paid <strong>$" + _turfIncome + "</strong> in protection rackets overnight.</span>")>> <</if>> /* Renforts nocturnes de la faction ennemie & Contre-offensives pendant une guerre active */ <<if $war_state.active is true and $war_state.target_district isnot "none">> <<set _wDist to $war_state.target_district>> <<set _wFac to $factions[_wDist]>> <<if _wFac.conquered is false>> <<if _wFac.supply_sabotaged is true>> <<run $morning_notifications.push("<span style='color: #00e5ff;'><strong>Supply Blockade:</strong> Because you sabotaged <strong>" + _wFac.name + "</strong>'s supply depot, they received <strong>0 reinforcements</strong> overnight!</span>")>> <<if random(1, 100) <= 30>> <<set $factions[_wDist].supply_sabotaged to false>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>War Intel:</strong> " + _wFac.name + " has repaired their bombed supply lines. Their nightly reinforcements will resume tomorrow unless sabotaged again.</span>")>> <</if>> <<elseif _wFac.defense < _wFac.max_defense>> <<set _reinf to random(6, 14)>> <<set $factions[_wDist].defense to Math.min(_wFac.max_defense, _wFac.defense + _reinf)>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>Enemy Reinforcements:</strong> <strong>" + _wFac.name + "</strong> fortified their positions overnight (<strong>+" + _reinf + " Enemy Defense</strong>). Sabotage their Supply Depot to halt reinforcements!</span>")>> <</if>> <<set _reqTurfDef to Math.max(8, Math.floor(_wFac.max_defense / 12))>> <<if _hasTurfDefenders < _reqTurfDef and random(1, 100) <= 35>> <<set _retalType to random(1, 3)>> <<if _retalType is 1>> <<set _raidLoss to Math.min($money, random(800, 2800))>> <<set $money -= _raidLoss>> <<set $nightly_spent += _raidLoss>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>War Retaliation (Stash Hit):</strong> " + _wFac.name + " hitmen raided an under-guarded drop house! You lost <strong>-$" + _raidLoss + "</strong> (Need " + _reqTurfDef + "+ Turf Defense Power to repel raids).</span>")>> <<elseif _retalType is 2>> <<addHeat 5>> <<set _raidLoss to Math.min($money, random(400, 1200))>> <<set $money -= _raidLoss>> <<set $nightly_spent += _raidLoss>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>War Retaliation (Drive-By Arson):</strong> " + _wFac.name + " threw Molotovs at one of your fronts overnight! Repairs cost <strong>-$" + _raidLoss + "</strong> and police sirens swarmed the block (<strong>+5% Heat</strong>).</span>")>> <<else>> <<for _gm to 0; _gm < $gang_members.length; _gm++>> <<set $gang_members[_gm].loyalty to Math.max(10, $gang_members[_gm].loyalty - 8)>> <</for>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>War Retaliation (Intimidation):</strong> Unchecked " + _wFac.name + " hit squads ambushed your lookouts overnight! Your gang's morale took a hit (<strong>-8 Loyalty</strong> across roster).</span>")>> <</if>> <</if>> <</if>> <</if>> /* ======================================================= */ /* --- FINANCIAL TICK & GANG UPKEEP PAYMENTS --- */ /* ======================================================= */ <<if $gang_members.length > 0>> <<if $money >= _gangUpkeep>> <<set $money -= _gangUpkeep>> <<set $nightly_spent += _gangUpkeep>> <<for _g to 0; _g < $gang_members.length; _g++>> <<set $gang_members[_g].loyalty to Math.clamp($gang_members[_g].loyalty + 1, 0, 100)>> <</for>> <<run $morning_notifications.push("<span style='color: #55aaff;'><strong>Gang Payroll:</strong> Paid <strong>$" + _gangUpkeep + "</strong> to maintain your soldiers. Loyalty increased slightly.</span>")>> <<else>> <<run $morning_notifications.push("<span style='color: #ff4444;'><strong>CRITICAL:</strong> You failed to pay your gang salaries today! ($" + _gangUpkeep + " needed). Your men are furious.</span>")>> <<for _g to $gang_members.length - 1; _g >= 0; _g-->> <<set $gang_members[_g].loyalty -= 15>> <<if $gang_members[_g].loyalty <= 0>> <<run $morning_notifications.push("<span style='color: #ff1111;'><strong>DESERTION:</strong> " + $gang_members[_g].name + " left your organization due to zero loyalty.</span>")>> <<run $gang_members.deleteAt(_g)>> <</if>> <</for>> <</if>> <</if>> /* --- TRAIT : HEARTTHROB (10 clients d'escort) --- */ <<if $counters.escort_clients >= 10 and $traits.heartthrob is false>> <<set $traits.heartthrob to true>> <<set $charisma += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Heartthrob :</strong> You've learned exactly how to charm and satisfy women. (Charisma +1)")>> <</if>> /* --- TRAIT : SWIMMER (15 séances de natation) --- */ <<if $counters.swims >= 15 and $traits.swimmer is false>> <<set $traits.swimmer to true>> <<set $maxstamina += 15>> <<run $morning_notifications.push("<strong>Trait Unlocked - Swimmer :</strong> Fighting ocean currents has expanded your lung capacity. (Max Stamina +15)")>> <</if>> /* Indices : Combat */ <<if $counters.combats_won >= 2 and $milestones.combat_2 is false>> <<set $milestones.combat_2 to true>> <<run $morning_notifications.push("<em>Your knuckles are bruised, but the fear of a street fight is starting to fade.</em>")>> <</if>> <<if $counters.combats_won >= 10 and $milestones.combat_10 is false>> <<set $milestones.combat_10 to true>> <<run $morning_notifications.push("<em>You catch yourself naturally analyzing people's stances and weak points as they walk past you.</em>")>> <</if>> <<if $counters.combats_won >= 22 and $milestones.combat_22 is false>> <<set $milestones.combat_22 to true>> <<run $morning_notifications.push("<em>The chaos of a brawl feels slower now. You see punches coming before they are even thrown.</em>")>> <</if>> <<if $counters.combats_won >= 45 and $milestones.combat_45 is false>> <<set $milestones.combat_45 to true>> <<run $morning_notifications.push("<em>There's a coldness in you. Breaking a man's jaw doesn't make your heart race anymore.</em>")>> <</if>> <<if $counters.combats_won >= 80 and $milestones.combat_80 is false>> <<set $milestones.combat_80 to true>> <<run $morning_notifications.push("<em>Local thugs seem to instinctively avoid making eye contact with you on the street.</em>")>> <</if>> <<if $counters.combats_won >= 125 and $milestones.combat_125 is false>> <<set $milestones.combat_125 to true>> <<run $morning_notifications.push("<em>Violence is no longer an event. It is simply a tool you use with terrifying precision.</em>")>> <</if>> <<if $counters.combats_won >= 200 and $milestones.combat_200 is false>> <<set $milestones.combat_200 to true>> <<run $morning_notifications.push("<em>You feel entirely detached from human fragility. You are a walking weapon, and the city knows it.</em>")>> <</if>> /* Indices : Gym */ <<if $counters.gym_workouts >= 5 and $milestones.gym_5 is false>> <<set $milestones.gym_5 to true>><<run $morning_notifications.push("<em>Your muscles ache deeply, but you're getting into a steady rhythm at the gym.</em>")>> <</if>> <<if $counters.gym_workouts >= 10 and $milestones.gym_10 is false>> <<set $milestones.gym_10 to true>><<run $morning_notifications.push("<em>Your posture is changing. You naturally stand taller and broader.</em>")>> <</if>> <<if $counters.gym_workouts >= 15 and $milestones.gym_15 is false>> <<set $milestones.gym_15 to true>><<run $morning_notifications.push("<em>Your old clothes are starting to feel a little tight around the shoulders.</em>")>> <</if>> <<if $counters.gym_workouts >= 25 and $milestones.gym_25 is false>> <<set $milestones.gym_25 to true>><<run $morning_notifications.push("<em>People have started glancing at your arms when you walk down the street.</em>")>> <</if>> <<if $counters.gym_workouts >= 30 and $milestones.gym_30 is false>> <<set $milestones.gym_30 to true>><<run $morning_notifications.push("<em>You lift heavy weights with terrifying ease now.</em>")>> <</if>> <<if $counters.gym_workouts >= 35 and $milestones.gym_35 is false>> <<set $milestones.gym_35 to true>><<run $morning_notifications.push("<em>Your body fat is melting away, revealing pure, hardened muscle underneath.</em>")>> <</if>> <<if $counters.gym_workouts >= 45 and $milestones.gym_45 is false>> <<set $milestones.gym_45 to true>><<run $morning_notifications.push("<em>You are becoming massive. Finding clothes that fit is becoming a real issue.</em>")>> <</if>> <<if $counters.gym_workouts >= 50 and $milestones.gym_50 is false>> <<set $milestones.gym_50 to true>><<run $morning_notifications.push("<em>Your physical presence is genuinely intimidating to regular people.</em>")>> <</if>> <<if $counters.gym_workouts >= 55 and $milestones.gym_55 is false>> <<set $milestones.gym_55 to true>><<run $morning_notifications.push("<em>You have pushed the human body almost to its absolute natural limit.</em>")>> <</if>> <<if $counters.gym_workouts >= 65 and $milestones.gym_65 is false>> <<set $milestones.gym_65 to true>><<run $morning_notifications.push("<em>Even veteran powerlifters stop their sets to watch you move weight.</em>")>> <</if>> <<if $counters.gym_workouts >= 70 and $milestones.gym_70 is false>> <<set $milestones.gym_70 to true>><<run $morning_notifications.push("<em>Your tendons and core density feel forged out of solid steel.</em>")>> <</if>> <<if $counters.gym_workouts >= 75 and $milestones.gym_75 is false>> <<set $milestones.gym_75 to true>><<run $morning_notifications.push("<em>Your cardiovascular conditioning and explosive power are reaching Olympian levels.</em>")>> <</if>> <<if $counters.gym_workouts >= 80 and $milestones.gym_80 is false>> <<set $milestones.gym_80 to true>><<run $morning_notifications.push("<em>Every muscle group is striated and carved like a classical marble statue.</em>")>> <</if>> <<if $counters.gym_workouts >= 90 and $milestones.gym_90 is false>> <<set $milestones.gym_90 to true>><<run $morning_notifications.push("<em>You radiate an aura of unstoppable physical dominance wherever you walk.</em>")>> <</if>> <<if $counters.gym_workouts >= 95 and $milestones.gym_95 is false>> <<set $milestones.gym_95 to true>><<run $morning_notifications.push("<em>Standard gym equipment barely challenges your raw strength anymore.</em>")>> <</if>> <<if $counters.gym_workouts >= 100 and $milestones.gym_100 is false>> <<set $milestones.gym_100 to true>><<run $morning_notifications.push("<em>A hundred grueling sessions of iron: your body is an unyielding fortress.</em>")>> <</if>> <<if $counters.gym_workouts >= 110 and $milestones.gym_110 is false>> <<set $milestones.gym_110 to true>><<run $morning_notifications.push("<em>You stand on the threshold of true physical perfection—an Apex Titan among men.</em>")>> <</if>> /* Indices : Kidnapping */ <<if $counters.total_kidnappings >= 5 and $milestones.kidnap_5 is false>> <<set $milestones.kidnap_5 to true>> <<run $morning_notifications.push("<em>You find yourself naturally analyzing the blind spots in the streets when you walk.</em>")>> <</if>> <<if $counters.total_kidnappings >= 25 and $milestones.kidnap_25 is false>> <<set $milestones.kidnap_25 to true>> <<run $morning_notifications.push("<em>Reading a target's vulnerability has become second nature to you.</em>")>> <</if>> <<if $counters.total_kidnappings >= 75 and $milestones.kidnap_75 is false>> <<set $milestones.kidnap_75 to true>> <<run $morning_notifications.push("<em>You move like a ghost. Snatching someone from the street feels as easy as picking a flower.</em>")>> <</if>> /* Indices : Sprinter */ <<if $counters.travels >= 12 and $milestones.sprinter_25 is false>> <<set $milestones.sprinter_25 to true>> <<run $morning_notifications.push("<em>Your legs ache a bit, but you feel like you're getting used to walking the streets.</em>")>> <</if>> <<if $counters.travels >= 25 and $milestones.sprinter_50 is false>> <<set $milestones.sprinter_50 to true>> <<run $morning_notifications.push("<em>You navigate the city faster now, knowing exactly which alleys to take.</em>")>> <</if>> <<if $counters.travels >= 37 and $milestones.sprinter_75 is false>> <<set $milestones.sprinter_75 to true>> <<run $morning_notifications.push("<em>Your breathing stays perfectly steady even after a long walk across town. You feel incredibly light on your feet.</em>")>> <</if>> /* Indices : Athletic */ <<if $counters.basketball_training >= 5 and $milestones.athletic_25 is false>> <<set $milestones.athletic_25 to true>> <<run $morning_notifications.push("<em>Your muscles are sore from the training, but it's a good kind of pain.</em>")>> <</if>> <<if $counters.basketball_training >= 10 and $milestones.athletic_50 is false>> <<set $milestones.athletic_50 to true>> <<run $morning_notifications.push("<em>You start feeling noticeably more athletic and energetic during the day.</em>")>> <</if>> <<if $counters.basketball_training >= 15 and $milestones.athletic_75 is false>> <<set $milestones.athletic_75 to true>> <<run $morning_notifications.push("<em>You feel like the physical training is really paying off. Your body is hardening.</em>")>> <</if>> /* Indices : Bulk Buyer */ <<if $counters.drugs_bought >= 25 and $milestones.bulk_25 is false>> <<set $milestones.bulk_25 to true>> <<run $morning_notifications.push("<em>A few dealers nodded at you today. Your face is becoming familiar in the local scene.</em>")>> <</if>> <<if $counters.drugs_bought >= 50 and $milestones.bulk_50 is false>> <<set $milestones.bulk_50 to true>> <<run $morning_notifications.push("<em>The street peddlers seem to recognize you as a serious customer now.</em>")>> <</if>> <<if $counters.drugs_bought >= 75 and $milestones.bulk_75 is false>> <<set $milestones.bulk_75 to true>> <<run $morning_notifications.push("<em>Word is spreading that you move product. You feel like the local dealers are preparing to hold out their best stashes for you.</em>")>> <</if>> /* Indices : Narcotics Dealing */ <<if $counters.drugs_sold >= 10 and $milestones.dealer_10 isnot true>> <<set $milestones.dealer_10 to true>> <<run $morning_notifications.push("<em>Your corner hustle is picking up. Regular customers in the district know to look for you when they need a fix.</em>")>> <</if>> <<if $counters.drugs_sold >= 40 and $milestones.dealer_40 isnot true>> <<set $milestones.dealer_40 to true>> <<run $morning_notifications.push("<em>Your trap operations and street runners are carving out a loyal customer base across the city.</em>")>> <</if>> <<if $counters.drugs_sold >= 100 and $milestones.dealer_100 isnot true>> <<set $milestones.dealer_100 to true>> <<run $morning_notifications.push("<em>Whispers of a ruthless kingpin dominate the narcotics underground. Your word on the street is becoming law.</em>")>> <</if>> /* Indices : Smooth Criminal */ <<if $counters.successful_dhustles >= 2 and $milestones.hustle_25 isnot true>> <<set $milestones.hustle_25 to true>> <<run $morning_notifications.push("<em>You are getting comfortable lying to people's faces. It feels almost natural.</em>")>> <</if>> <<if $counters.successful_dhustles >= 5 and $milestones.hustle_50 isnot true>> <<set $milestones.hustle_50 to true>> <<run $morning_notifications.push("<em>Reading people's desires and exploiting their trust is becoming second nature to you.</em>")>> <</if>> <<if $counters.successful_dhustles >= 8 and $milestones.hustle_75 isnot true>> <<set $milestones.hustle_75 to true>> <<run $morning_notifications.push("<em>Your mind is sharper, your smile more convincing. You have the city's lonely hearts wrapped around your finger.</em>")>> <</if>> /* --- VÉRIFICATION FINALE DES TRAITS --- */ <<if $counters.total_kidnappings >= 10 and $traits.kidnapper_1 is false>> <<set $traits.kidnapper_1 to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Prowler (Kidnap Lv.1) :</strong> You have learned the basics of abduction. Kidnapping attempts are now slightly easier (-2 Difficulty).")>> <</if>> <<if $counters.combats_lost >= 5 and $traits.tough_skin is false>> <<set $traits.tough_skin to true>> <<set $maxhp += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Tough Skin :</strong> You've taken so many beatings that your body has adapted to the pain. You can take more punishment now. (Max HP +10)")>> <</if>> <<if $counters.total_kidnappings >= 50 and $traits.kidnapper_2 is false>> <<set $traits.kidnapper_2 to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Shadow (Kidnap Lv.2) :</strong> You are highly efficient at making people disappear. Kidnapping difficulty is significantly reduced (-4 Difficulty).")>> <</if>> <<if $counters.total_kidnappings >= 100 and $traits.kidnapper_3 is false>> <<set $traits.kidnapper_3 to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Boogeyman (Kidnap Lv.3) :</strong> The streets belong to you. Your abductions are now flawless and automatically succeed.")>> <</if>> <<if $counters.travels >= 50 and $traits.sprinter is false>> <<set $traits.sprinter to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Sprinter :</strong> You know these streets by heart now. Your travel times are reduced.")>> <</if>> <<if $counters.gym_workouts >= 20 and $traits.jacked is false>> <<set $traits.jacked to true>> <<set $strength += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Jacked (Gym Lv.1) :</strong> Your dedication to the iron paid off. You are noticeably muscular. (Strength +1)")>> <</if>> <<if $counters.gym_workouts >= 40 and $traits.ripped is false>> <<set $traits.ripped to true>> <<set $strength += 1>> <<set $charisma += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Ripped (Gym Lv.2) :</strong> You are built like a machine. You pack serious power. Women turn around on the streets to check you out. (Strength +1, Charisma +1)")>> <</if>> <<if $counters.gym_workouts >= 60 and $traits.bodybuilder is false>> <<set $traits.bodybuilder to true>> <<set $strength += 1>> <<set $maxhp += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Bodybuilder (Gym Lv.3) :</strong> You are an absolute behemoth of muscle and raw power rivaling the likes of Arnold and Ronnie. (Strength +1, Max HP +10)")>> <</if>> <<if $counters.gym_workouts >= 85 and $traits.gym_4 is false>> <<set $traits.gym_4 to true>> <<set $strength += 1>> <<set $maxstamina += 15>> <<set $maxhp += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Olympian (Gym Lv.4) :</strong> Your physique combines monstrous mass with freakish athletic conditioning. (Strength +1, Max Stamina +15, Max HP +10)")>> <</if>> <<if $counters.gym_workouts >= 115 and $traits.gym_5 is false>> <<set $traits.gym_5 to true>> <<set $strength += 1>> <<set $charisma += 1>> <<set $maxstamina += 15>> <<set $maxhp += 15>> <<run $morning_notifications.push("<strong>Trait Unlocked - Apex Titan (Gym Lv.5) :</strong> You have transcended normal human limits—a walking Greek god of iron and power. (Strength +1, Charisma +1, Max Stamina +15, Max HP +15)")>> <</if>> <<if $counters.basketball_training >= 20 and $traits.athletic is false>> <<set $traits.athletic to true>> <<set $maxstamina += 20>> <<set $strength += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Athletic :</strong> Your training paid off. Your stamina has gotten better (Max stamina +20), and you feel much stronger (Strength +1).")>> <</if>> <<if $counters.drugs_bought >= 100 and $traits.bulk_buyer is false>> <<set $traits.bulk_buyer to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Bulk Buyer :</strong> The streets know you have cash. Dealers will now offer you larger stashes.")>> <</if>> <<if $counters.successful_dhustles >= 10 and $traits.smooth_criminal isnot true>> <<set $traits.smooth_criminal to true>> <<set $charisma += 1>> <<set $intelligence += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Smooth Criminal :</strong> You have mastered the art of the hustle. You are more persuasive and cunning. (Charisma +1, Intelligence +1).")>> <</if>> /* --- NARCOTICS DEALING TRAITS --- */ <<if $counters.drugs_sold >= 20 and $traits.dealer_1 is false>> <<set $traits.dealer_1 to true>> <<set $intelligence += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Corner Pusher (Dealing Lv.1) :</strong> You've learned how to read customer twitches and cut clean street profits. (+15% drug sale income, -20% corner dealing heat, +1 Intelligence)")>> <</if>> <<if $counters.drugs_sold >= 60 and $traits.dealer_2 is false>> <<set $traits.dealer_2 to true>> <<set $charisma += 1>> <<set $maxstamina += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Trap Lord (Dealing Lv.2) :</strong> You control supply and demand across your territory. (+30% drug sale income, -35% dealing heat, gang runner yield boosted, +1 Charisma, +10 Max Stamina)")>> <</if>> <<if $counters.drugs_sold >= 150 and $traits.dealer_3 is false>> <<set $traits.dealer_3 to true>> <<set $intelligence += 1>> <<set $charisma += 1>> <<set $maxhp += 20>> <<set $maxstamina += 15>> <<run $morning_notifications.push("<strong>Trait Unlocked - Cartel Kingpin (Dealing Lv.3) :</strong> The city's narcotics empire answers to you. (+50% drug sale income, undercover sting immunity, +1 bonus unit on cooking/pressing, +1 Intelligence, +1 Charisma, +20 Max HP, +15 Max Stamina)")>> <</if>> <<if $counters.combats_won >= 5 and $traits.combat_1 is false>> <<set $traits.combat_1 to true>> <<set $maxhp += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Novice (Combat Lv.1) :</strong> The adrenaline of your first few victories has faded, replaced by cold focus. (Max HP +10)")>> <</if>> <<if $counters.combats_won >= 15 and $traits.combat_2 is false>> <<set $traits.combat_2 to true>> <<set $maxstamina += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Brawler (Combat Lv.2) :</strong> You've learned how to manage your breath and energy during a street fight. (Max Stamina +10)")>> <</if>> <<if $counters.combats_won >= 30 and $traits.combat_3 is false>> <<set $traits.combat_3 to true>> <<set $strength += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Fighter (Combat Lv.3) :</strong> Your technique has evolved. You know exactly where to hit to cause maximum damage. (Strength +1)")>> <</if>> <<if $counters.combats_won >= 60 and $traits.combat_4 is false>> <<set $traits.combat_4 to true>> <<set $maxhp += 10>> <<set $maxstamina += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Killer (Combat Lv.4) :</strong> You fight with a lethal efficiency that terrifies standard thugs. (Max HP +10, Max Stamina +10)")>> <</if>> <<if $counters.combats_won >= 100 and $traits.combat_5 is false>> <<set $traits.combat_5 to true>> <<set $charisma += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Psycho (Combat Lv.5) :</strong> Your eyes carry the weight of a hundred broken bones. People subconsciously fear you. (Charisma +1 from Intimidation)")>> <</if>> <<if $counters.combats_won >= 150 and $traits.combat_6 is false>> <<set $traits.combat_6 to true>> <<set $strength += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Death (Combat Lv.6) :</strong> You bring absolute ruin to anyone who stands in your way. (Strength +1)")>> <</if>> <<if $counters.combats_won >= 250 and $traits.combat_7 is false>> <<set $traits.combat_7 to true>> <<set $maxhp += 20>> <<set $strength += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Reaper (Combat Lv.7) :</strong> You are the apex predator of this concrete jungle. Unstoppable. Unkillable. (Max HP +20, Strength +1)")>> <</if>> <<if $counters.total_searches >= 15 and $traits.scavenger is false>> <<set $traits.scavenger to true>> <<set $intelligence += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Scavenger :</strong> From tossing hotel rooms to searching crates, you've developed an eagle eye for valuable items. (Intelligence +1)")>> <</if>> <<if $counters.hotel_shifts >= 5 and $traits.blue_collar is false>> <<set $traits.blue_collar to true>> <<set $maxstamina += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Blue Collar :</strong> Scrubbing floors and hauling trash bags has hardened your base endurance. (Max Stamina +10)")>> <</if>> <<if $counters.total_alcohol_drank >= 20 and $traits.iron_liver is false>> <<set $traits.iron_liver to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Iron Liver :</strong> Alcohol flows through your veins like water. Your tolerance to getting drunk has significantly increased.")>> <</if>> <<if $counters.outside >= 15 and $traits.exhibitionnist is false>> <<set $traits.exhibitionnist to true>> <<set $charisma += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Exhibitionnist :</strong> Having your way in public so many times made you sneakier, and more convincing. Your street whores now earn more money, and you gain +1 Charisma")>> <</if>> <<if $counters.rough >= 50 and $traits.rough is false>> <<set $traits.rough to true>> <<set $maxstamina += 10>> <<run $morning_notifications.push("<strong>Trait Unlocked - Rough: </strong> Roughing up girls made you more ruthless and long lasting, gain 10 stamina and lose less energy for sex")>> <</if>> <<if $counters.shadowboard_quests >= 5 and $traits.contractor_1 isnot true>> <<set $traits.contractor_1 to true>> <<set $maxstamina += 15>> <<run $morning_notifications.push("<strong>Trait Unlocked - Freelancer (Contractor Lv.1):</strong> Your clean execution on the ShadowBoard has earned the trust of anonymous brokers. (+15 Max Stamina, +15% ShadowBoard payouts)")>> <</if>> <<if $counters.shadowboard_quests >= 15 and $traits.contractor_2 isnot true>> <<set $traits.contractor_2 to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Fixer's Favorite (Contractor Lv.2):</strong> High-tier handlers now route priority jobs to your terminal. (Unlocks a 4th daily ShadowBoard quest, +30% ShadowBoard payouts)")>> <</if>> <<if $counters.shadowboard_quests >= 30 and $traits.contractor_3 isnot true>> <<set $traits.contractor_3 to true>> <<set $intelligence += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Shadow Broker (Contractor Lv.3):</strong> You are a legend on the encrypted network. (+1 Intelligence, +50% ShadowBoard payouts)")>> <</if>> <<if $counters.apex_contracts >= 3 and $traits.cleaner_1 isnot true>> <<set $traits.cleaner_1 to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Corporate Cleaner (Apex Lv.1):</strong> Apex Management's partners trust your discretion. Weekly Apex contracts now scrub <strong>-22% Heat</strong> (up from -15%).")>> <</if>> <<if $counters.apex_contracts >= 8 and $traits.cleaner_2 isnot true>> <<set $traits.cleaner_2 to true>> <<run $morning_notifications.push("<strong>Trait Unlocked - Spin Doctor (Apex Lv.2):</strong> Senior partners now give you full access to their client dossier. Weekly Apex contracts now offer <strong>3 contracts to choose from</strong> and scrub <strong>-30% Heat</strong>!")>> <</if>> <<if $counters.apex_contracts >= 15 and $traits.cleaner_3 isnot true>> <<set $traits.cleaner_3 to true>> <<set $charisma += 1>> <<run $morning_notifications.push("<strong>Trait Unlocked - Untouchable (Apex Lv.3):</strong> You move through the corporate underworld like a ghost. Weekly Apex contracts now scrub <strong>-40% Heat</strong>, and you gain <strong>+1 Charisma</strong>!")>> <</if>> /* --- RÉINITIALISATION DE L'ALCOOL ET DES BUFFS DE DROGUES --- */ <<if $drunk_int_penalty is true>> <<set $intelligence += 1>> <<set $drunk_int_penalty to false>> <</if>> <<if $drunk_str_bonus is true>> <<set $strength -= 1>> <<set $drunk_str_bonus to false>> <</if>> <<set $drunk_units to 0>> <<if $drug_buffs isnot undefined>> <<if $drug_buffs.cocaine_int > 0>> <<set $intelligence -= $drug_buffs.cocaine_int>> <<set $drug_buffs.cocaine_int to 0>> <</if>> <<if $drug_buffs.ecstasy_cha > 0>> <<set $charisma -= $drug_buffs.ecstasy_cha>> <<set $drug_buffs.ecstasy_cha to 0>> <</if>> <<if $drug_buffs.crack_str > 0>> <<set $strength -= $drug_buffs.crack_str>> <<set $drug_buffs.crack_str to 0>> <</if>> <<if $drug_buffs.crack_cha > 0>> <<set $charisma += $drug_buffs.crack_cha>> <<set $drug_buffs.crack_cha to 0>> <</if>> <</if>> /* --- SYSTÈME BANCAIRE --- */ <<set $bank_rate_timer -= 1>> <<if $bank_rate_timer <= 0>> <<set $bank_interest_rate to random(2, 10)>> <<set $bank_rate_timer to 5>> <<run $morning_notifications.push("<em>Financial News: Bank interest rates have been updated to " + $bank_interest_rate + "% per day.</em>")>> <</if>> <<if $bank_loan > 0>> <<set _interest to Math.floor($bank_loan * ($bank_interest_rate / 100))>> <<set $bank_loan += _interest>> <<set $bank_days_left -= 1>> <<if $bank_days_left <= 0>> <<if $money >= $bank_loan>> <<set $money -= $bank_loan>> <<set $nightly_spent += $bank_loan>> <<run $morning_notifications.push("<strong>Bank Alert:</strong> The 7-day deadline was reached. The bank automatically withdrew <strong>$" + $bank_loan + "</strong> from your accounts to settle your debt.")>> <<set $bank_loan to 0>> <<else>> <<set _seized to $money>> <<set $nightly_spent += _seized>> <<set $bank_loan -= $money>> <<set $money to 0>> <<set $bank_days_left to 7>> <<run $morning_notifications.push("<strong>Bank Warning:</strong> The deadline passed! The bank seized all your cash ($" + _seized + "), but you still owe $" + $bank_loan + ". You have 7 days to pay the rest.")>> <</if>> <<else>> <<run $morning_notifications.push("<em>Bank Notice: Your loan accumulated $" + _interest + " in interest overnight. You now owe $" + $bank_loan + ". (" + $bank_days_left + " days left)</em>")>> <</if>> <</if>> /* --- APPLICATION ESCORT : REQUÊTES QUOTIDIENNES --- */ <<set $escort_requests to []>> <<set _baseRequests to Math.floor($charisma / 3)>> <<set _numRequests to _baseRequests + random(0, 1)>> <<set _numRequests to Math.clamp(_numRequests, 0, 3)>> <<set _races to ["white", "asian", "black"]>> <<set _pref_actions to [ { id: "VG", name: "Vaginal Penetration" }, { id: "AN", name: "Anal Sex" }, { id: "FINGER", name: "Fingering" }, { id: "CUNI", name: "Cunnilingus" }, { id: "BJ", name: "Blowjobs" }, { id: "FF", name: "Face Fucking" }, { id: "RAN", name: "Hardcore Anal Sex" }, { id: "RVG", name: "Rough Vaginal Penetration" } ]>> <<set _pref_finishes to [ { id: "CREAMPIE", name: "Creampie" }, { id: "ANCREAMPIE", name: "Anal Creampie" }, { id: "FACIAL", name: "Facial" }, { id: "CUMBODY", name: "Cum on Body" } ]>> <<for _i to 0; _i < _numRequests; _i++>> <<set _payout to 150 + ($charisma * 25) + random(-30, 50)>> <<set _duration_minutes to random(6, 12) * 15>> <<set _client_race to _races.random()>> <<run $escort_requests.push({ race: _client_race, payout: _payout, duration: _duration_minutes, favorite_action: _pref_actions.random(), favorite_finish: _pref_finishes.random() })>> <</for>> /* --- DISCIPLINE NOCTURNE DES CAPTIVES --- */ <<if $basement_captives.length > 0>> <<set _gainedDiscipline to false>> <<set _disciplineStep to (_hasWarden is true ? 15 : 5)>> <<for _i to 0; _i < $basement_captives.length; _i++>> <<if $basement_captives[_i].tied is true>> <<if $basement_captives[_i].discipline < 100>> <<set $basement_captives[_i].discipline += _disciplineStep>> <<set _gainedDiscipline to true>> <<if $basement_captives[_i].discipline >= 100>> <<set $basement_captives[_i].discipline = 100>> <</if>> <</if>> <</if>> <</for>> <<if _gainedDiscipline is true>> <<if _hasWarden is true>> <<run $morning_notifications.push("<em>The Warden's brutal and relentless conditioning is rapidly shattering the minds of your captives. (Discipline ++).</em>")>> <<else>> <<run $morning_notifications.push("<em>The isolation and restraints are breaking the will of the girls in your cellar. (Discipline increased)</em>")>> <</if>> <</if>> <</if>> /* --- CROISSANCE DU GROW HOUSE (WEED) --- */ <<if $grow_house !== undefined and $grow_house.crop_active is true and $grow_house.ready is false>> <<if _currentDay >= $grow_house.planted_day + $grow_house.grow_days_needed>> <<set $grow_house.ready to true>> <<run $morning_notifications.push("<span style='color:#00ffaa;'><strong>🌿 Hydroponic Harvest Ready:</strong> Your crop of <strong>" + $grow_house.strain + "</strong> has fully matured in the Suburban Grow House and is ready for harvesting!</span>")>> <</if>> <</if>> <<set $has_hotel_room to false>> /* --- SYSTÈME DE DÉPENSES HEBDOMADAIRES (MONEY DRAINS) --- */ <<set _currentDay to Math.floor($time / 1440)>> <<if _currentDay >= $last_billing_day + 7>> <<set $last_billing_day to _currentDay>> <<set $chop_shop_sales_this_week to 0>> /* 1. Loyer de base (Résidence, Cave & Garage) */ <<set _baseHousingRent to 200>> <<if $player_housing is 1>> <<set _baseHousingRent to ($player_housing_rented is true ? 2500 : 0)>> <<elseif $player_housing is 2>> <<set _baseHousingRent to ($player_housing_rented is true ? 18000 : 0)>> <</if>> <<if $empire_properties === undefined>> <<set $empire_properties to { hangar: { owned: false, capacity: 10, level: 1 }, brothel: { owned: false, capacity: 5, level: 1, lobbying_done: false }, escort: { owned: false, capacity: 3, level: 1 }, traphouse: { owned: false, rented: false, level: 1 }, growhouse: { owned: false, rented: false, level: 1 }, chemlab: { owned: false, rented: false, level: 1 } }>> <<else>> <<if $empire_properties.traphouse === undefined>><<set $empire_properties.traphouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.growhouse === undefined>><<set $empire_properties.growhouse to { owned: false, rented: false, level: 1 }>><</if>> <<if $empire_properties.chemlab === undefined>><<set $empire_properties.chemlab to { owned: false, rented: false, level: 1 }>><</if>> <</if>> <<set _rentCost to _baseHousingRent + ($basement_level * 150) + ($garage_level * 150)>> <<if $empire_properties.traphouse.rented is true>><<set _rentCost += 500>><</if>> <<if $empire_properties.growhouse.rented is true>><<set _rentCost += 2000>><</if>> <<if $empire_properties.chemlab.rented is true>><<set _rentCost += 5000>><</if>> /* 2. Taxes des Propriétés de l'Empire & Résidence achetée */ <<set _propertyTaxes to 0>> <<if $player_housing is 1 and $player_housing_rented isnot true>> <<set _propertyTaxes += 600>> <<elseif $player_housing is 2 and $player_housing_rented isnot true>> <<set _propertyTaxes += 2500>> <</if>> <<if $empire_properties.brothel.owned is true>> <<set _propertyTaxes += 1000 + ($empire_properties.brothel.level * 150)>> <</if>> <<if $empire_properties.escort.owned is true>> <<set _propertyTaxes += 600 + ($empire_properties.escort.level * 100)>> <</if>> <<if $empire_properties.hangar.owned is true>> <<set _propertyTaxes += 400 + ($empire_properties.hangar.level * 100)>> <</if>> <<if $contraband_warehouse_owned is true>> <<set _propertyTaxes += 500 + ($contraband_warehouse_level * 150)>> <</if>> <<if $empire_properties.traphouse.owned is true>><<set _propertyTaxes += 200>><</if>> <<if $empire_properties.growhouse.owned is true>><<set _propertyTaxes += 600>><</if>> <<if $empire_properties.chemlab.owned is true>><<set _propertyTaxes += 1200>><</if>> /* 3. Nourriture et entretien des filles */ <<set _foodCost to ($basement_captives.length * 50) + ($network_girls.length * 75)>> /* 4. Facturation totale */ <<set _totalBill to _rentCost + _propertyTaxes + _foodCost>> <<set $money -= _totalBill>> <<set $nightly_spent += _totalBill>> /* 5. Création de la notification */ <<set _billMessage to "<strong>Weekly Expenses Paid:</strong> The automated system deducted <strong>$" + _rentCost + "</strong> for base rent">> <<if _propertyTaxes > 0>> <<set _billMessage += ", <strong>$" + _propertyTaxes + "</strong> for business taxes and laundering fees">> <</if>> <<if _foodCost > 0>> <<set _billMessage += ", plus <strong>$" + _foodCost + "</strong> in groceries and supplies">> <</if>> <<set _billMessage += ". (Total debited: <strong style='color:#ff4444;'>-$" + _totalBill + "</strong>)">> <<if $money < 0>> <<set _billMessage += "<br><span style='color: #ff4444;'><em>WARNING: Your account is overdrawn. You are in debt! You need to make money fast before the local loan sharks come knocking.</em></span>">> <</if>> <<run $morning_notifications.push(_billMessage)>> <</if>> <<set $last_tracked_money to $money>> <</widget>> <<widget "processAlcohol">> /* Avancement du temps */ <<set _oldTime to $time>> <<set $time += 15>> /* Définition des limites selon le trait Iron Liver */ <<set _blackout_limit to ($traits.iron_liver ? 20 : 15)>> <<set _int_penalty_limit to ($traits.iron_liver ? 8 : 5)>> /* Vérification Blackout */ <<if $drunk_units >= _blackout_limit>> <<set $hp to 0>> <<goto "Combat_Lose">> <<else>> /* Vérification 10 unités : +1 Force (Courage liquide) */ <<if $drunk_units >= 10 and $drunk_str_bonus is false>> <<set $strength += 1>> <<set $drunk_str_bonus to true>> <<if passage() is "Neon_Hotel_Bar">> <<set $hotel_bar_result += "<br><br><strong>System:</strong> Liquid courage fills your veins. (Strength +1 until you sleep)">> <<else>> <<set $bar_result += "<br><br><strong>System:</strong> Liquid courage fills your veins. (Strength +1 until you sleep)">> <</if>> <</if>> /* Vérification du malus d'Intelligence (-1) selon la nouvelle limite */ <<if $drunk_units >= _int_penalty_limit and $drunk_int_penalty is false>> <<set $intelligence -= 1>> <<set $drunk_int_penalty to true>> <<if passage() is "Neon_Hotel_Bar">> <<set $hotel_bar_result += "<br><br><strong>System:</strong> The room spins slightly. It's hard to focus. (Intelligence -1 until you sleep)">> <<else>> <<set $bar_result += "<br><br><strong>System:</strong> The room spins slightly. It's hard to focus. (Intelligence -1 until you sleep)">> <</if>> <</if>> /* Vérification du temps de sommeil */ <<if Math.floor((_oldTime - 240) / 1440) < Math.floor(($time - 240) / 1440)>> <<goto "Pass_Out">> <<else>> <<goto `passage()`>> <</if>> <</if>> <</widget>> <<widget "showSexImage">><<nobr>> <<set _max to setup.sex_limits[$sex_eth][$sex_action]>> <<set _prefix to "images/Sex/" + $sex_eth + "/" + $sex_action + "/" >> <<set _min to ($sex_eth is "asian" and $sex_action is "VG" ? 1 : 0)>> <<randomImage _prefix _max _min "#ed2939">> <</nobr>><</widget>> <<widget "showCellImage">><<nobr>> <<set _max to setup.cell_limits[$cell_action]>> <<set _prefix to "images/Sex/work/captivity/" + $cell_action + "/">> <<randomImage _prefix _max 0 "#5c001e">> <</nobr>><</widget>> <<widget "showStreamImage">> <<set _action to $args[0]>> <<set _max to setup.stream_limits[_action]>> <<set _prefix to "images/Sex/work/streams/" + _action + "/">> <<randomImage _prefix _max 0 "#00aaff">> <</widget>> <<widget "addXP">> <<set _gainedXP to _args[0]>> <<set $rep_xp += _gainedXP>> <<for $rep_xp >= $rep_next_level>> <<if $rep_level is 5 and $player_housing < 1>> <<set $rep_xp to $rep_next_level>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>Reputation Capped:</strong> You have enough experience for Level 6, but the underworld won't respect a boss who lives in a slum. Buy a House!</span>")>> <<break>> <<elseif $rep_level is 10 and $player_housing < 2>> <<set $rep_xp to $rep_next_level>> <<run $morning_notifications.push("<span style='color: #ffaa00;'><strong>Reputation Capped:</strong> You are ready for Level 11, but the elites demand you live like one. Buy the Penthouse!</span>")>> <<break>> <<else>> <<set $rep_xp -= $rep_next_level>> <<set $rep_level += 1>> <<set $stat_points += 1>> <<set $rep_next_level to Math.floor(100 * Math.pow($rep_level, 1.5))>> <<run $morning_notifications.push("<strong><span style='color: #ffaa00;'>LEVEL UP!</span></strong> Your Street Reputation reached <strong>Level " + $rep_level + "</strong>. You gained 1 Stat Point to spend at home.")>> <</if>> <</for>> <</widget>> <<widget "setupCarStats">> <<if $active_vehicle is "Rusty Shitbox" or $active_vehicle is "Rusty Wreck">> <<set $player_car_speed to 3>> <<set $player_car_handling to 0.4>> <<elseif $active_vehicle is "Standard Sedan">> <<set $player_car_speed to 5>> <<set $player_car_handling to 1.0>> <<elseif $active_vehicle is "Utility Van">> <<set $player_car_speed to 4>> <<set $player_car_handling to 0.8>> <<elseif $active_vehicle is "Armored SUV">> <<set $player_car_speed to 6>> <<set $player_car_handling to 1.3>> <<elseif $active_vehicle is "Viper" or $active_vehicle is "Sports Car" or $active_vehicle is "Hypercar">> <<set $player_car_speed to 8>> <<set $player_car_handling to 2.2>> <<else>> <<set $player_car_speed to 2>> <<set $player_car_handling to 0.3>> <</if>> <</widget>> <<widget "addHeat">> <<set _heatGain to $args[0]>> <<set $heat += _heatGain>> <<if $heat > 100>><<set $heat to 100>><</if>> <</widget>> <<widget "useSexStamina">> <<set _cost to $args[0]>> <<if $traits.rough>> <<set $stamina -= Math.floor(_cost / 2)>> <<else>> <<set $stamina -= _cost>> <</if>> <</widget>> <<widget "unequipOutfit">> <<if $active_outfit isnot "none" and $active_outfit isnot undefined and $outfit_db[$active_outfit] isnot undefined>> <<set _oldOut to $outfit_db[$active_outfit]>> <<set $strength -= _oldOut.str>> <<set $intelligence -= _oldOut.int>> <<set $charisma -= _oldOut.cha>> <<set $maxhp -= _oldOut.hp>> <<set $maxstamina -= _oldOut.sta>> <<if $hp > $maxhp>><<set $hp to $maxhp>><</if>> <<if $stamina > $maxstamina>><<set $stamina to $maxstamina>><</if>> <</if>> <<set $active_outfit to "none">> <</widget>> <<widget "equipOutfit">> <<set _newOutId to $args[0]>> <<unequipOutfit>> <<if _newOutId isnot "none" and $outfit_db[_newOutId] isnot undefined>> <<set _newOut to $outfit_db[_newOutId]>> <<set $active_outfit to _newOutId>> <<set $strength += _newOut.str>> <<set $intelligence += _newOut.int>> <<set $charisma += _newOut.cha>> <<set $maxhp += _newOut.hp>> <<set $maxstamina += _newOut.sta>> <<set $hp += _newOut.hp>> <<set $stamina += _newOut.sta>> <</if>> <</widget>>
<<widget "updateMarket">> /* Prix de base [Min, Max] */ <<set _w to random(5, 15)>> <<set _c to random(60, 120)>> <<set _e to random(10, 25)>> <<set _cr to random(10, 30)>> <<set _h to random(40, 90)>> /* Réduction permanente de 20% à l'achat si le réseau de contrebande du Port est débloqué */ <<set _discount to ($harbor_smuggling_unlocked is true ? 0.80 : 1.0)>> /* Application de l'offre et la demande selon le quartier */ <<if $current_location is "Financial">> <<set $market.weed to { price: Math.max(1, Math.floor(_w * 1.5 * _discount)), sell: Math.floor(_w * 1.5 * 0.9), qty: random(1, 10) }>> <<set $market.cocaine to { price: Math.max(1, Math.floor(_c * 2.0 * _discount)), sell: Math.floor(_c * 2.0 * 0.9), qty: random(1, 5) }>> <<set $market.ecstasy to { price: Math.max(1, Math.floor(_e * 1.2 * _discount)), sell: Math.floor(_e * 1.2 * 0.9), qty: random(5, 15) }>> <<set $market.crack to { price: Math.max(1, Math.floor(_cr * 0.5 * _discount)), sell: Math.floor(_cr * 0.5 * 0.9), qty: 0 }>> <<set $market.heroin to { price: Math.max(1, Math.floor(_h * 0.8 * _discount)), sell: Math.floor(_h * 0.8 * 0.9), qty: random(0, 2) }>> <<elseif $current_location is "Slums">> <<set $market.weed to { price: Math.max(1, Math.floor(_w * 0.9 * _discount)), sell: Math.floor(_w * 0.9 * 0.9), qty: random(10, 30) }>> <<set $market.cocaine to { price: Math.max(1, Math.floor(_c * 1.0 * _discount)), sell: Math.floor(_c * 1.0 * 0.9), qty: random(0, 3) }>> <<set $market.ecstasy to { price: Math.max(1, Math.floor(_e * 1.0 * _discount)), sell: Math.floor(_e * 1.0 * 0.9), qty: random(1, 5) }>> <<set $market.crack to { price: Math.max(1, Math.floor(_cr * 0.7 * _discount)), sell: Math.floor(_cr * 0.7 * 0.9), qty: random(20, 50) }>> <<set $market.heroin to { price: Math.max(1, Math.floor(_h * 0.7 * _discount)), sell: Math.floor(_h * 0.7 * 0.9), qty: random(10, 30) }>> <<elseif $current_location is "Neon">> <<set $market.weed to { price: Math.max(1, Math.floor(_w * 1.2 * _discount)), sell: Math.floor(_w * 1.2 * 0.9), qty: random(10, 20) }>> <<set $market.cocaine to { price: Math.max(1, Math.floor(_c * 1.5 * _discount)), sell: Math.floor(_c * 1.5 * 0.9), qty: random(5, 15) }>> <<set $market.ecstasy to { price: Math.max(1, Math.floor(_e * 2.0 * _discount)), sell: Math.floor(_e * 2.0 * 0.9), qty: random(20, 50) }>> <<set $market.crack to { price: Math.max(1, Math.floor(_cr * 1.0 * _discount)), sell: Math.floor(_cr * 1.0 * 0.9), qty: random(5, 15) }>> <<set $market.heroin to { price: Math.max(1, Math.floor(_h * 1.0 * _discount)), sell: Math.floor(_h * 1.0 * 0.9), qty: random(1, 5) }>> <<elseif $current_location is "Port">> /* Zone d'importation massive */ <<set $market.weed to { price: Math.max(1, Math.floor(_w * 0.7 * _discount)), sell: Math.floor(_w * 0.7 * 0.9), qty: random(50, 100) }>> <<set $market.cocaine to { price: Math.max(1, Math.floor(_c * 0.7 * _discount)), sell: Math.floor(_c * 0.7 * 0.9), qty: random(20, 50) }>> <<set $market.ecstasy to { price: Math.max(1, Math.floor(_e * 0.7 * _discount)), sell: Math.floor(_e * 0.7 * 0.9), qty: random(20, 50) }>> <<set $market.crack to { price: Math.max(1, Math.floor(_cr * 0.7 * _discount)), sell: Math.floor(_cr * 0.7 * 0.9), qty: random(50, 100) }>> <<set $market.heroin to { price: Math.max(1, Math.floor(_h * 0.7 * _discount)), sell: Math.floor(_h * 0.7 * 0.9), qty: random(50, 100) }>> <<else>> /* Moyenne par défaut (Projects, Outskirts) */ <<set $market.weed to { price: Math.max(1, Math.floor(_w * _discount)), sell: Math.floor(_w * 0.9), qty: random(5, 20) }>> <<set $market.cocaine to { price: Math.max(1, Math.floor(_c * _discount)), sell: Math.floor(_c * 0.9), qty: random(1, 5) }>> <<set $market.ecstasy to { price: Math.max(1, Math.floor(_e * _discount)), sell: Math.floor(_e * 0.9), qty: random(5, 10) }>> <<set $market.crack to { price: Math.max(1, Math.floor(_cr * _discount)), sell: Math.floor(_cr * 0.9), qty: random(10, 25) }>> <<set $market.heroin to { price: Math.max(1, Math.floor(_h * _discount)), sell: Math.floor(_h * 0.9), qty: random(5, 15) }>> <</if>> <</widget>>
<<widget "displayTime">> <<set _days to Math.floor($time / 1440) + 1>> <<set _hours to Math.floor($time / 60) % 24>> <<set _mins to $time % 60>> <<set _ampm to _hours >= 12 ? "PM" : "AM">> <<set _displayH to _hours % 12>> <<if _displayH is 0>><<set _displayH to 12>><</if>> <<set _displayM to _mins < 10 ? "0" + _mins : _mins>> Day _days - _displayH:_displayM _ampm <</widget>>
<<widget "randomImage">><<nobr>> /* Configuration du minimum */ <<set _minNum to 0>> <<if $args[2] isnot undefined>> <<set _minNum to $args[2]>> <</if>> /* Configuration de la couleur */ <<set _borderColor to "#555">> <<if $args[3] isnot undefined>> <<set _borderColor to $args[3]>> <</if>> /* Tirage au sort (évite le trou asian/AN/2 qui n'existe pas) */ <<set _randomNum to random(_minNum, $args[1])>> <<if $args[0] is "images/Sex/asian/AN/" and _randomNum is 2>> <<set _randomNum to 3>> <</if>> /* Affichage dynamique avec fallback : WebP -> GIF -> JPG -> PNG -> WebM/MP4 */ <div @style="'border: 2px solid ' + _borderColor + '; padding: 5px; text-align: center; margin-bottom: 20px; background-color: #111; border-radius: 5px;'"> <img @src="$args[0] + _randomNum + '.webp'" onerror="if(this.src.indexOf('.webp') !== -1) { this.src = this.src.replace('.webp', '.gif'); } else if(this.src.indexOf('.gif') !== -1) { this.src = this.src.replace('.gif', '.jpg'); } else if(this.src.indexOf('.jpg') !== -1) { this.src = this.src.replace('.jpg', '.png'); } else { var base = this.src.replace(/\.(webp|gif|jpg|png)$/i, ''); var vid = document.createElement('video'); vid.autoplay = true; vid.loop = true; vid.muted = true; vid.playsInline = true; vid.style.cssText = this.style.cssText; vid.innerHTML = '<source src=\'' + base + '.webm\' type=\'video/webm\'><source src=\'' + base + '.mp4\' type=\'video/mp4\'>'; this.parentNode.replaceChild(vid, this); }" style="max-width: 100%; height: auto; border-radius: 3px;"> </div> <</nobr>><</widget>> <<widget "randomBackground">><<nobr>> <<set _minNum to 0>> <<if $args[2] isnot undefined>><<set _minNum to $args[2]>><</if>> <<set _randomNum to random(_minNum, $args[1])>> /* L'image est placée en absolute, étirée (cover), avec z-index: 1 et une opacité de 0.3 pour ne pas cacher le texte */ <img @src="$args[0] + _randomNum + '.webp'" onerror="if(this.src.indexOf('.webp') !== -1) { this.src = this.src.replace('.webp', '.gif'); } else if(this.src.indexOf('.gif') !== -1) { this.src = this.src.replace('.gif', '.jpg'); } else if(this.src.indexOf('.jpg') !== -1) { this.src = this.src.replace('.jpg', '.png'); } else { var base = this.src.replace(/\.(webp|gif|jpg|png)$/i, ''); var vid = document.createElement('video'); vid.autoplay = true; vid.loop = true; vid.muted = true; vid.playsInline = true; vid.style.cssText = this.style.cssText; vid.innerHTML = '<source src=\'' + base + '.webm\' type=\'video/webm\'><source src=\'' + base + '.mp4\' type=\'video/mp4\'>'; this.parentNode.replaceChild(vid, this); }" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1; opacity: 0.3; pointer-events: none;"> <</nobr>><</widget>> <<widget "initVipDancerData">><<nobr>> <<set setup.vip_dancers to { 1: { name: "Candy & Velvet", isDuo: true, stage: ["girl1.mp4"], strip: ["girl1strip.mp4"], nude: ["girl1nude.mp4"], blow: ["girl1blow.mp4", "girl1blow1.mp4", "girl1blow2.mp4"], fuck: ["girl1fuck.mp4", "girl1fuck1.mp4", "girl1fuck2.mp4"], cum: ["girl1cum.mp4"] }, 2: { name: "Diamond", stage: ["girl2.mp4", "girl2a.mp4"], strip: ["girl2strip.mp4"], nude: ["girl2nude.mp4"], blow: ["girl2blow.mp4", "girl2blow1.mp4", "girl2blow2.mp4"], fuck: ["girl2fuck.mp4", "girl2fuck1.mp4", "girl2fuck2.mp4", "girl2fuck3.mp4"], cum: ["girl2cum.mp4"] }, 3: { name: "Cinnamon", stage: ["girl3.mp4", "girl3a.mp4", "girl3b.mp4"], strip: ["girl3strip.mp4"], nude: ["girl3nude.mp4"], blow: ["girl3blow.mp4", "girl3blow1.mp4", "girl3blow2.mp4"], fuck: ["girl3fuck.mp4", "girl3fuck1.mp4", "girl3fuck2.mp4", "girl3fuck3.mp4"], cum: ["girl3cum.mp4"] }, 4: { name: "Mercedes", stage: ["girl4.mp4", "girl4a.mp4"], strip: ["girl4strip.mp4"], nude: ["girl4nude.mp4", "girl4nude1.mp4"], blow: ["girl4blow.mp4", "girl4blow1.mp4", "girl4blow2.mp4"], fuck: ["girl4fuck.mp4", "girl4fuck1.mp4", "girl4fuck2.mp4"], cum: ["girl4cum.mp4"] }, 5: { name: "Bambi", stage: ["girl5.mp4"], strip: ["girl5strip.mp4"], nude: ["girl5nude.mp4"], blow: ["girl5blow.mp4", "girl5blow1.mp4", "girl5blow2.mp4"], fuck: ["girl5fuck.mp4", "girl5fuck1.mp4"], cum: ["girl5cum.mp4"] }, 6: { name: "Crystal", stage: ["girl6.mp4"], strip: ["girl6strip.mp4"], nude: ["girl6nude.mp4"], blow: ["girl6blow.mp4", "girl6blow1.mp4", "girl6blow2.mp4"], fuck: ["girl6fuck.mp4", "girl6fuck1.mp4", "girl6fuck2.mp4", "girl6fuck3.mp4"], cum: ["girl6cum.mp4"] }, 7: { name: "Angel", stage: ["girl7.mp4", "girl7a.mp4"], strip: ["girl7strip.mp4"], nude: ["girl7nude.mp4"], blow: ["girl7blow.mp4", "girl7blow1.mp4", "girl7blow2.mp4"], fuck: ["girl7fuck.mp4", "girl7fuck1.mp4", "girl7fuck2.mp4"], cum: ["girl7cum.mp4"] }, 8: { name: "Trixie", stage: ["girl8.mp4", "girl8a.mp4"], strip: ["girl8strip.mp4", "girl8strip1.mp4"], nude: ["girl8nude.mp4"], blow: ["girl8blow.mp4", "girl8blow1.mp4", "girl8blow2.mp4"], fuck: ["girl8fuck.mp4", "girl8fuck1.mp4", "girl8fuck2.mp4", "girl8fuck3.mp4"], cum: ["girl8cum.mp4"] }, 9: { name: "Destiny", stage: ["girl9.mp4", "girl9a.mp4"], strip: ["girl9strip.mp4"], nude: ["girl9nude.mp4"], blow: ["girl9blow.mp4", "girl9blow1.mp4", "girl9blow2.mp4"], fuck: ["girl9fuck.mp4", "girl9fuck1.mp4", "girl9fuck2.mp4"], cum: ["girl9cum.mp4"] }, 10: { name: "Cherry", stage: ["girl10.mp4", "girl10a.mp4"], strip: ["girl10strip.mp4", "girl10strip1.mp4", "girl10strip2.mp4"], nude: ["girl10nude.mp4", "girl10nude1.mp4", "girl10nude2.mp4"], blow: ["girl10blow.mp4", "girl10blow1.mp4", "girl10blow2.mp4"], fuck: ["girl10fuck.mp4", "girl10fuck1.mp4", "girl10fuck2.mp4"], cum: ["girl10cum.mp4"] } }>> <</nobr>><</widget>>